BlazyViewsTest.php in Blazy 8
File
tests/modules/blazy_test/src/Plugin/views/style/BlazyViewsTest.php
View source
<?php
namespace Drupal\blazy_test\Plugin\views\style;
use Drupal\Core\Form\FormStateInterface;
use Drupal\blazy\BlazyDefault;
use Drupal\blazy\Dejavu\BlazyStylePluginBase;
use Drupal\blazy\BlazyGrid;
class BlazyViewsTest extends BlazyStylePluginBase {
public function admin() {
return \Drupal::service('blazy_test.admin');
}
protected function defineOptions() {
$options = [];
$defaults = BlazyDefault::extendedSettings() + BlazyDefault::gridSettings();
foreach ($defaults as $key => $value) {
$options[$key] = [
'default' => $value,
];
}
return $options + parent::defineOptions();
}
public function buildOptionsForm(&$form, FormStateInterface $form_state) {
$fields = [
'captions',
'layouts',
'images',
'links',
'titles',
'classes',
'overlays',
'thumbnails',
'layouts',
];
$definition = $this
->getDefinedFieldOptions($fields);
$definition += [
'namespace' => 'blazy',
'settings' => $this->options,
'style' => TRUE,
];
$this
->admin()
->buildSettingsForm($form, $definition);
unset($form['layout'], $form['preserve_keys'], $form['grid_header'], $form['visible_items']);
}
public function render() {
$view = $this->view;
$settings = $this->options + BlazyDefault::entitySettings();
$settings['item_id'] = 'box';
$settings['caption'] = array_filter($settings['caption']);
$settings['namespace'] = 'blazy';
$settings['ratio'] = '';
$settings['_views'] = TRUE;
$elements = [];
foreach ($this
->renderGrouping($view->result, $settings['grouping']) as $rows) {
$items = $this
->buildElements($settings, $rows);
$item = isset($items[0]) ? $items[0] : NULL;
$this
->blazyManager()
->isBlazy($settings, $item);
$elements = BlazyGrid::build($items, $settings);
}
return $elements;
}
public function buildElements(array $settings, $rows) {
$build = [];
$view = $this->view;
$item_id = $settings['item_id'];
foreach ($rows as $index => $row) {
$view->row_index = $index;
$box = [];
$box[$item_id] = [];
$box['#settings'] = $settings;
if (!empty($settings['vanilla'])) {
$box[$item_id] = $view->rowPlugin
->render($row);
}
else {
$this
->buildElement($box, $row, $index);
}
$build[] = $box;
unset($box);
}
unset($view->row_index);
return $build;
}
}