You are here

abstract class SlickViewsBase in Slick Views 7.3

Same name and namespace in other branches
  1. 8.2 src/Plugin/views/style/SlickViewsBase.php \Drupal\slick_views\Plugin\views\style\SlickViewsBase

The base class common for Slick style plugins.

Hierarchy

Expanded class hierarchy of SlickViewsBase

File

src/Plugin/views/style/SlickViewsBase.php, line 13

Namespace

Drupal\slick_views\Plugin\views\style
View source
abstract class SlickViewsBase extends BlazyStylePluginBase {

  /**
   * The slick service manager.
   *
   * @var \Drupal\slick\SlickManagerInterface
   */
  protected $manager;

  /**
   * Returns the blazy manager.
   */
  public function manager() {
    if (!isset($this->manager)) {
      $this->manager = new SlickManager();
    }
    return $this->manager;
  }

  /**
   * Returns the slick admin.
   */
  public function admin() {
    if (!isset($this->admin)) {
      $this->admin = new SlickAdmin($this
        ->manager());
    }
    return $this->admin;
  }

  /**
   * {@inheritdoc}
   */
  public function init(&$view, &$display, $options = NULL) {
    parent::init($view, $display, $options);

    // Even empty active to call render; where library is attached if required.
    if ($view->use_ajax) {
      $this->definition['even empty'] = TRUE;
    }
  }

  /**
   * {@inheritdoc}
   */
  public function option_definition() {
    $options = [];
    foreach (SlickDefault::extendedSettings() as $key => $value) {
      $options[$key] = [
        'default' => $value,
      ];
    }
    drupal_alter('slick_views_options_info', $options);
    return $options + parent::option_definition();
  }

  /**
   * Returns the defined scopes for the current form.
   */
  protected function getDefinedFormScopes() {

    // Pass the common field options relevant to this style.
    $fields = [
      'captions',
      'classes',
      'images',
      'layouts',
      'links',
      'overlays',
      'thumbnails',
      'thumb_captions',
      'titles',
    ];

    // Fetches the returned field definitions to be used to define form scopes.
    $definition = $this
      ->getDefinedFieldOptions($fields);
    foreach ([
      'id',
      'nav',
      'thumb_positions',
      'vanilla',
    ] as $key) {
      $definition[$key] = TRUE;
    }
    $definition['forms'] = [
      'fieldable' => TRUE,
      'grid' => TRUE,
    ];
    $definition['opening_class'] = 'form--views';
    $definition['_views'] = TRUE;
    return $definition;
  }

  /**
   * Build the Slick settings form.
   */
  public function buildSettingsForm(&$form, $definition) {
    $this
      ->admin()
      ->buildSettingsForm($form, $definition);
    $title = '<p class="form__header form__title">';
    $title .= t('Check Vanilla for content/custom markups, not fields. <small>See it under <strong>Format > Show</strong> section. Otherwise slick markups apply which require some fields added below.</small>');
    $title .= '</p>';
    $form['opening']['#markup'] .= $title;
    if (isset($form['image'])) {
      $form['image']['#description'] .= ' ' . t('Use Blazy formatter to have it lazyloaded. Other supported Formatters: Colorbox, Intense, Responsive image, Video Embed Field, Youtube Field.');
    }
    if (isset($form['overlay'])) {
      $form['overlay']['#description'] .= ' ' . t('Be sure to CHECK "<strong>Style settings > Use field template</strong>" _only if using Slick formatter for nested sliders, otherwise keep it UNCHECKED!');
    }

    // Bring in dots thumbnail effect normally used by Slick Image formatter.
    $form['thumbnail_effect'] = [
      '#type' => 'select',
      '#title' => t('Dots thumbnail effect'),
      '#options' => [
        'hover' => t('Hoverable'),
        'grid' => t('Static grid'),
      ],
      '#empty_option' => t('- None -'),
      '#description' => t('Dependent on a Skin, Dots and Thumbnail image options. No asnavfor/ Optionset thumbnail is needed. <ol><li><strong>Hoverable</strong>: Dots pager are kept, and thumbnail will be hidden and only visible on dot mouseover, default to min-width 120px.</li><li><strong>Static grid</strong>: Dots are hidden, and thumbnails are displayed as a static grid acting like dots pager.</li></ol>Alternative to asNavFor aka separate thumbnails as slider.'),
      '#weight' => -100,
    ];
  }

  /**
   * Overrides StylePluginBase::render().
   */
  protected function buildSettings() {
    $settings = parent::buildSettings();

    // Prepare needed settings to work with.
    $settings['item_id'] = 'slide';
    $settings['caption'] = array_filter($settings['caption']);
    $settings['namespace'] = 'slick';
    $settings['nav'] = !$settings['vanilla'] && $settings['optionset_thumbnail'] && isset($this->view->result[1]);
    $settings['overridables'] = empty($settings['override']) ? array_filter($settings['overridables']) : $settings['overridables'];
    return $settings;
  }

  /**
   * Returns slick contents.
   */
  public function buildElements(array $settings, $rows) {
    $build = [];
    $view = $this->view;
    $item_id = $settings['item_id'];
    foreach ($rows as $index => $row) {
      $view->row_index = $index;
      $slide = [];
      $thumb = $slide[$item_id] = [];

      // Provides a potential unique thumbnail different from the main image.
      if (!empty($settings['thumbnail'])) {
        $thumbnail = $this
          ->getFieldRenderable($row, 0, $settings['thumbnail']);
        if (isset($thumbnail['rendered']['#item'])) {
          $item = $thumbnail['rendered']['#item'];

          // @todo re-check at D7.
          $uri = is_object($item) ? $item->uri : $item['uri'];
          $settings['thumbnail_style'] = $thumbnail['rendered']['#image_style'];
          $settings['thumbnail_uri'] = image_style_path($settings['thumbnail_style'], $uri);
        }
      }
      $slide['settings'] = $settings;

      // Use Vanilla slick if so configured, ignoring Slick markups.
      if (!empty($settings['vanilla'])) {
        $slide[$item_id] = $view->style_plugin->row_plugin
          ->render($row);
      }
      else {

        // Otherwise, extra works. With a working Views cache, no big deal.
        $this
          ->buildElement($slide, $row, $index);

        // Build thumbnail navs if so configured.
        if (!empty($settings['nav'])) {
          $thumb[$item_id] = empty($settings['thumbnail']) ? [] : $this
            ->getFieldRendered($index, $settings['thumbnail']);
          $thumb['caption'] = empty($settings['thumbnail_caption']) ? [] : $this
            ->getFieldRendered($index, $settings['thumbnail_caption']);
          $build['thumb']['items'][$index] = $thumb;
        }
      }
      if (!empty($settings['class'])) {
        $class = $this
          ->getFieldString($row, $settings['class'], $index, TRUE);

        // Ensures useless field name is overriden, even if empty.
        $slide['settings']['class'] = empty($class) ? '' : $class;
      }
      if (empty($slide[$item_id]) && !empty($settings['image'])) {
        $slide[$item_id] = $this
          ->getFieldRendered($index, $settings['image']);
      }
      $build['items'][$index] = $slide;
      unset($slide, $thumb);
    }
    unset($view->row_index);
    return $build;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
BlazyStyleBaseTrait::$firstImage protected property The first Blazy formatter found to get data from for lightbox gallery, etc.
BlazyStyleBaseTrait::$htmlSettings protected property The dynamic html settings.
BlazyStyleBaseTrait::getFieldRenderable public function Returns the renderable array of field containing rendered and raw data.
BlazyStyleBaseTrait::getFirstImage public function Returns the first Blazy formatter found.
BlazyStyleBaseTrait::setHtmlSettings protected function Sets dynamic html settings.
BlazyStyleOptionsTrait::$viewsOptions protected property The Views as options.
BlazyStyleOptionsTrait::getDefinedFieldOptions public function Returns available fields for select options.
BlazyStyleOptionsTrait::getFieldString public function Returns the string values for the expected Title, ET label, List, Term.
BlazyStylePluginBase::$blazyManager protected property The blazy manager service. Overrides BlazyStyleBaseTrait::$blazyManager
BlazyStylePluginBase::blazyManager public function Returns the blazy manager. Overrides BlazyStyleBaseTrait::blazyManager
BlazyStylePluginBase::buildElement public function Returns an individual row/element content.
BlazyStylePluginTrait::getCaption public function Returns the rendered caption fields.
BlazyStylePluginTrait::getFieldRendered public function Returns the rendered field, either string or array.
BlazyStylePluginTrait::getImageItem public function Get the image item to work with out of this formatter.
BlazyStylePluginTrait::getImageRenderable public function Returns the modified renderable image_formatter to support lazyload.
BlazyStylePluginTrait::getLayout public function Returns the rendered layout fields.
BlazyStylePluginTrait::isImageRenderable public function Checks if we can work with this formatter, otherwise no go if flattened.
SlickViewsBase::$manager protected property The slick service manager.
SlickViewsBase::admin public function Returns the slick admin.
SlickViewsBase::buildElements public function Returns slick contents.
SlickViewsBase::buildSettings protected function Overrides StylePluginBase::render(). Overrides BlazyStyleBaseTrait::buildSettings
SlickViewsBase::buildSettingsForm public function Build the Slick settings form.
SlickViewsBase::getDefinedFormScopes protected function Returns the defined scopes for the current form.
SlickViewsBase::init public function Initialize a style plugin. Overrides views_plugin_style::init
SlickViewsBase::manager public function Returns the blazy manager.
SlickViewsBase::option_definition public function Information about options for all kinds of purposes will be held here. Overrides views_plugin_style::option_definition 1
views_object::$definition public property Handler's definition.
views_object::$options public property Except for displays, options for the object will be held here. 1
views_object::altered_option_definition function Collect this handler's option definition and alter them, ready for use.
views_object::construct public function Views handlers use a special construct function. 4
views_object::export_option public function 1
views_object::export_options public function
views_object::export_option_always public function Always exports the option, regardless of the default value.
views_object::options Deprecated public function Set default options on this object. 1
views_object::set_default_options public function Set default options.
views_object::set_definition public function Let the handler know what its full definition is.
views_object::unpack_options public function Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away.
views_object::unpack_translatable public function Unpack a single option definition.
views_object::unpack_translatables public function Unpacks each handler to store translatable texts.
views_object::_set_option_defaults public function
views_plugin::$display public property The current used views display.
views_plugin::$plugin_name public property The plugin name of this plugin, for example table or full.
views_plugin::$plugin_type public property The plugin type of this plugin, for example style or query.
views_plugin::$view public property The top object of a view. Overrides views_object::$view 1
views_plugin::additional_theme_functions public function Provide a list of additional theme functions for the theme info page.
views_plugin::options_submit public function Handle any special handling on the validate form. 9
views_plugin::plugin_title public function Return the human readable name of the display.
views_plugin::summary_title public function Returns the summary of the settings in the display. 8
views_plugin::theme_functions public function Provide a full list of possible theme templates used by this style.
views_plugin_style::$row_plugin public property The row plugin, if it's initialized and the style itself supports it.
views_plugin_style::$row_tokens public property Store all available tokens row rows.
views_plugin_style::build_sort public function Called by the view builder to see if this style handler wants to interfere with the sorts. If so it should build; if it returns any non-TRUE value, normal sorting will NOT be added to the query. 1
views_plugin_style::build_sort_post public function Called by the view builder to let the style build a second set of sorts that will come after any other sorts in the view. 1
views_plugin_style::destroy public function Destructor. Overrides views_object::destroy
views_plugin_style::even_empty public function Should the output of the style plugin be rendered even if it's empty. 1
views_plugin_style::get_field public function Get a rendered field.
views_plugin_style::get_field_value public function Get the raw field value.
views_plugin_style::get_row_class public function Return the token replaced row class for the specified row.
views_plugin_style::options_form public function Provide a form to edit options for this plugin. Overrides views_plugin::options_form 9
views_plugin_style::options_validate public function Validate the options form. Overrides views_plugin::options_validate
views_plugin_style::pre_render public function Allow the style to do stuff before each row is rendered.
views_plugin_style::query public function Add anything to the query that we might need to. Overrides views_plugin::query 2
views_plugin_style::render public function Render the display in this style. 5
views_plugin_style::render_fields public function Render all of the fields for a given style and store them on the object.
views_plugin_style::render_grouping public function Group records as needed for rendering.
views_plugin_style::render_grouping_sets public function Render the grouping sets.
views_plugin_style::tokenize_value public function Take a value and apply token replacement logic to it.
views_plugin_style::uses_fields public function Return TRUE if this style also uses fields.
views_plugin_style::uses_row_class public function Return TRUE if this style also uses a row plugin.
views_plugin_style::uses_row_plugin public function Return TRUE if this style also uses a row plugin.
views_plugin_style::uses_tokens public function Return TRUE if this style uses tokens.
views_plugin_style::validate public function Validate that the plugin is correct and can be saved. Overrides views_plugin::validate