View source
<?php
namespace Drupal\blazy\Plugin\views\style;
use Drupal\Core\Form\FormStateInterface;
use Drupal\views\Plugin\views\style\StylePluginBase;
use Drupal\blazy\BlazyManagerInterface;
use Drupal\blazy\BlazyDefault;
use Drupal\blazy\BlazyGrid;
use Symfony\Component\DependencyInjection\ContainerInterface;
class BlazyViews extends StylePluginBase {
protected $usesRowPlugin = TRUE;
protected $usesGrouping = FALSE;
protected $blazyManager;
public function __construct(array $configuration, $plugin_id, $plugin_definition, BlazyManagerInterface $blazy_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->blazyManager = $blazy_manager;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('blazy.manager'));
}
public function admin() {
return \Drupal::service('blazy.admin');
}
public function blazyManager() {
return $this->blazyManager;
}
protected function defineOptions() {
$options = [];
foreach (BlazyDefault::gridSettings() as $key => $value) {
$options[$key] = [
'default' => $value,
];
}
return $options + parent::defineOptions();
}
public function buildOptionsForm(&$form, FormStateInterface $form_state) {
$definition = [
'namespace' => 'blazy',
'grid_form' => TRUE,
'settings' => $this->options,
'style' => TRUE,
'form_opening_classes' => 'form--blazy form--slick form--views form--half has-tooltip',
];
$this
->admin()
->openingForm($form, $definition);
$this
->admin()
->gridForm($form, $definition);
if (isset($form['grid'])) {
$form['grid']['#description'] = $this
->t('The amount of block grid columns for large monitors 64.063em.');
}
$this
->admin()
->finalizeForm($form, $definition);
unset($form['layout'], $form['preserve_keys'], $form['grid_header'], $form['visible_items'], $form['style']['#empty_option'], $form['grid']['#empty_option']);
}
public function render() {
$settings = $this->options;
$settings['count'] = count($this->view->result);
$settings['current_view_mode'] = $this->view->current_display;
$settings['item_id'] = 'content';
$settings['namespace'] = 'blazy';
$settings['view_name'] = $this->view->storage
->id();
$elements = [];
foreach ($this
->renderGrouping($this->view->result, $settings['grouping']) as $rows) {
$items = [];
foreach ($rows as $index => $row) {
$this->view->row_index = $index;
$items[$index] = $this->view->rowPlugin
->render($row);
}
$item = isset($items[0]) ? $items[0] : NULL;
$this->blazyManager
->isBlazy($settings, $item);
$elements = BlazyGrid::build($items, $settings);
$elements['#attached'] = $this->blazyManager
->attach($settings);
unset($this->view->row_index, $items);
}
return $elements;
}
}