You are here

class BlazyFormatterBlazy in Blazy 7

Same name and namespace in other branches
  1. 8.2 src/Plugin/Field/FieldFormatter/BlazyFormatterBlazy.php \Drupal\blazy\Plugin\Field\FieldFormatter\BlazyFormatterBlazy

Plugin implementation of the `Blazy File` or `Blazy Image` for Blazy only.

Hierarchy

Expanded class hierarchy of BlazyFormatterBlazy

See also

\Drupal\blazy\Plugin\Field\FieldFormatter\BlazyFileFormatter

\Drupal\blazy\Plugin\Field\FieldFormatter\BlazyImageFormatter

File

src/Plugin/Field/FieldFormatter/BlazyFormatterBlazy.php, line 14

Namespace

Drupal\blazy\Plugin\Field\FieldFormatter
View source
class BlazyFormatterBlazy extends BlazyFormatterBase {

  /**
   * Constructs a BlazyFormatter instance.
   */
  public function __construct($plugin_id, $field, $instance, BlazyManagerInterface $formatter) {
    parent::__construct($plugin_id, $field, $instance);
    $this->formatter = $formatter;
  }

  /**
   * {@inheritdoc}
   */
  public function admin() {
    if (!isset($this->admin)) {
      $this->admin = new BlazyAdminFormatter($this->formatter);
    }
    return $this->admin;
  }

  /**
   * {@inheritdoc}
   */
  public function viewElements($items, $entity) {
    $build = [];
    $files = $this
      ->getEntitiesToView($items);

    // Early opt-out if the field is empty.
    if (empty($files)) {
      return $build;
    }

    // Collects specific settings to this formatter.
    $settings = $this
      ->buildSettings();
    $settings['blazy'] = TRUE;
    $settings['namespace'] = $settings['item_id'] = $settings['lazy'] = 'blazy';

    // Build the settings.
    $build = [
      'settings' => $settings,
    ];

    // Modifies settings before building elements.
    $this->formatter
      ->preBuildElements($build, $files, $entity);

    // Build the elements.
    $this
      ->buildElements($build, $files);

    // Modifies settings post building elements.
    $this->formatter
      ->postBuildElements($build, $files, $entity);

    // Pass to manager for easy updates to all Blazy formatters.
    return $this->formatter
      ->build($build);
  }

  /**
   * Build the Blazy elements for image and file entity/ media.
   */
  public function buildElements(array &$build, $files) {
    $settings = $build['settings'];
    foreach ($files as $delta => $item) {

      // Some settings need to be available before arriving at theme_blazy() so
      // that lightboxes and media switcher can get context to work with.
      // The trouble is they are not always available depending on file entity
      // and other supported modules availability which is not always there.
      $settings['delta'] = $delta;
      $settings['type'] = isset($item->type) ? $item->type : 'image';
      $settings['uri'] = isset($item->uri) ? $item->uri : '';
      $box['item'] = $item;
      $box['settings'] = $settings;
      $this
        ->buildElement($box, $item, $delta);

      // Build caption if so configured.
      if (!empty($settings['caption'])) {
        foreach ($settings['caption'] as $caption) {
          if (isset($item->{$caption}) && ($caption_content = array_filter($this
            ->getCaption($item, $caption, $settings)))) {
            $box['captions'][$caption] = $caption_content;
          }
        }
      }

      // Image with grid, responsive image, lazyLoad, and lightbox supports.
      $build[$delta] = $this
        ->formatter()
        ->getBlazy($box);
      unset($box);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function buildElement(array &$element, $entity, $delta = 0) {

    // Do nothing.
  }

  /**
   * Returns the captions.
   */
  protected function getCaption($entity, $field_name, $settings) {
    return [];
  }

}

Members

Namesort descending Modifiers Type Description Overrides
BlazyFormatterBase::defaultSettings public static function Returns default settings. Overrides FormatterBase::defaultSettings 1
BlazyFormatterBase::getEntitiesToView protected function Converts $items array to object for easy D8 -> D7 backports. 1
BlazyFormatterBase::getRequiredForms public function Returns required form elements for the current formatter. Overrides FormatterBase::getRequiredForms 2
BlazyFormatterBase::getScopedFormElements public function Defines the scope for the form elements. Overrides FormatterBase::getScopedFormElements 2
BlazyFormatterBase::settingsForm public function Implements hook_field_formatter_settings_form(). Overrides FormatterBase::settingsForm 1
BlazyFormatterBase::settingsSummary public function Implements hook_field_formatter_settings_summary(). Overrides FormatterBase::settingsSummary
BlazyFormatterBlazy::admin public function Returns the blazy admin service for blazy-related module. Overrides BlazyFormatterBase::admin
BlazyFormatterBlazy::buildElement public function Build individual item if so configured such as for file entity goodness. Overrides BlazyFormatterBase::buildElement 1
BlazyFormatterBlazy::buildElements public function Build the Blazy elements for image and file entity/ media.
BlazyFormatterBlazy::getCaption protected function Returns the captions. 2
BlazyFormatterBlazy::viewElements public function Implements hook_field_formatter_view(). Overrides FormatterBase::viewElements
BlazyFormatterBlazy::__construct public function Constructs a BlazyFormatter instance. Overrides FormatterBase::__construct
FormatterBase::$admin protected property The blazy-related admin formatter service.
FormatterBase::$defaultSettingsMerged protected property Whether default settings have been merged into the current $settings.
FormatterBase::$fieldDefinition protected property The field definition.
FormatterBase::$fieldDisplay protected property The field display.
FormatterBase::$fieldInstance protected property The field instance.
FormatterBase::$htmlSettings protected property The form settings.
FormatterBase::$isMultiple protected property True if the field cardinality equals -1.
FormatterBase::$knownEntities protected property The known hard-coded entities.
FormatterBase::$langcode protected property The langcode.
FormatterBase::$pluginId protected property The blazy formatter plugin id.
FormatterBase::$settings protected property The formatter settings.
FormatterBase::$viewMode protected property The view mode.
FormatterBase::buildSettings public function Builds the settings. 1
FormatterBase::buildSettingsForm public function Implements hook_field_formatter_settings_form().
FormatterBase::buildSettingsSummary public function
FormatterBase::getHtmlSettings public function Gets html settings.
FormatterBase::getPluginId public function Gets formatter plugin id.
FormatterBase::getSetting public function
FormatterBase::getSettings public function Gets formatter settings.
FormatterBase::mergeDefaults protected function Merges default settings values into $settings.
FormatterBase::setHtmlSettings public function Sets html settings.
FormatterBase::setSetting public function
FormatterBase::setSettings public function Sets formatter settings.
FormatterBase::setupFieldVariables protected function Setup common variables across different hooks.
FormatterBase::view public function Implements hook_field_formatter_view().