Pageimage::isVariation() method

Given a file name (basename), return array of info if this is a variation for this instance’s file, or false if not.

Returned array includes the following indexes:

  • original (string): Original basename
  • url (string): URL to image
  • path (string): Full path + filename to image
  • width (int): Specified width in filename
  • height (int): Specified height in filename
  • actualWidth (int): Actual width when checked manually
  • actualHeight (int): Acual height when checked manually
  • crop (string): Cropping info string or blank if none
  • suffix (array): Array of suffixes

The following are only present if variation is based on another variation, and thus has a parent variation image between it and the original:

  • suffixAll (array): Contains all suffixes including among parent variations
  • parent (array): Variation info array of direct parent variation file

Usage

// basic usage
$bool = $pageimage->isVariation(string $basename);

// usage with all arguments
$bool = $pageimage->isVariation(string $basename, $options = []);

Arguments

NameType(s)Description
basenamestring

Filename to check (basename, which excludes path)

options (optional)array, bool

Array of options to modify behavior, or boolean to only specify allowSelf option.

  • allowSelf (bool): When true, it will return variation info even if same as current Pageimage. (default=false)
  • verbose (bool): Return verbose array of info? If false, just returns basename (string) or false. (default=true)

Return value

bool string array

Returns false if not a variation, or array (verbose) or string (non-verbose) of info if it is.


Hooking Pageimage::isVariation(…)

You can add your own hook events that are executed either before or after the Pageimage::isVariation(…) method is executed. Examples of both are included below. A good place for hook code such as this is in your /site/ready.php file.

Hooking before

The 'before' hooks are called immediately before each Pageimage::isVariation(…) method call is executed. This type of hook is especially useful for modifying arguments before they are sent to the method.

$this->addHookBefore('Pageimage::isVariation', function(HookEvent $event) {
  // Get the object the event occurred on, if needed
  $Pageimage = $event->object;

  // Get values of arguments sent to hook (and optionally modify them)
  $basename = $event->arguments(0);
  $options = $event->arguments(1);

  /* Your code here, perhaps modifying arguments */

  // Populate back arguments (if you have modified them)
  $event->arguments(0, $basename);
  $event->arguments(1, $options);
});

Hooking after

The 'after' hooks are called immediately after each Pageimage::isVariation(…) method call is executed. This type of hook is especially useful for modifying the value that was returned by the method call.

$this->addHookAfter('Pageimage::isVariation', function(HookEvent $event) {
  // Get the object the event occurred on, if needed
  $Pageimage = $event->object;

  // An 'after' hook can retrieve and/or modify the return value
  $return = $event->return;

  // Get values of arguments sent to hook (if needed)
  $basename = $event->arguments(0);
  $options = $event->arguments(1);

  /* Your code here, perhaps modifying the return value */

  // Populate back return value, if you have modified it
  $event->return = $return;
});

Pageimage methods and properties

API reference based on ProcessWire core version 3.0.236

Latest news

  • ProcessWire Weekly #543
    In the 543rd issue of ProcessWire Weekly we'll check out the latest weekly update from Ryan, introduce a couple of new third party modules — both authored by Bernhard Baumrock — and more. Read on!
    Weekly.pw / 5 October 2024
  • Custom Fields Module
    This week we look at a new ProFields module named Custom Fields. This module provides a way to rapidly build out ProcessWire fields that contain any number of subfields/properties within them.
    Blog / 30 August 2024
  • Subscribe to weekly ProcessWire news

“We chose ProcessWire because of its excellent architecture, modular extensibility and the internal API. The CMS offers the necessary flexibility and performance for such a complex website like superbude.de. ProcessWire offers options that are only available for larger systems, such as Drupal, and allows a much slimmer development process.” —xport communication GmbH