function StylePluginBase::buildOptionsForm

Same name in other branches
  1. 9 core/modules/views/src/Plugin/views/style/StylePluginBase.php \Drupal\views\Plugin\views\style\StylePluginBase::buildOptionsForm()
  2. 8.9.x core/modules/views/src/Plugin/views/style/StylePluginBase.php \Drupal\views\Plugin\views\style\StylePluginBase::buildOptionsForm()
  3. 11.x core/modules/views/src/Plugin/views/style/StylePluginBase.php \Drupal\views\Plugin\views\style\StylePluginBase::buildOptionsForm()

Overrides PluginBase::buildOptionsForm

10 methods override StylePluginBase::buildOptionsForm()
DefaultSummary::buildOptionsForm in core/modules/views/src/Plugin/views/style/DefaultSummary.php
Provide a form to edit options for this plugin.
EntityReference::buildOptionsForm in core/modules/views/src/Plugin/views/style/EntityReference.php
Provide a form to edit options for this plugin.
Grid::buildOptionsForm in core/modules/views/src/Plugin/views/style/Grid.php
Provide a form to edit options for this plugin.
GridResponsive::buildOptionsForm in core/modules/views/src/Plugin/views/style/GridResponsive.php
Provide a form to edit options for this plugin.
HtmlList::buildOptionsForm in core/modules/views/src/Plugin/views/style/HtmlList.php
Render the given style.

... See full list

File

core/modules/views/src/Plugin/views/style/StylePluginBase.php, line 282

Class

StylePluginBase
Base class for views style plugins.

Namespace

Drupal\views\Plugin\views\style

Code

public function buildOptionsForm(&$form, FormStateInterface $form_state) {
    parent::buildOptionsForm($form, $form_state);
    // Only fields-based views can handle grouping.  Style plugins can also exclude
    // themselves from being groupable by setting their "usesGrouping" property
    // to FALSE.
    // @todo Document "usesGrouping" in docs.php when docs.php is written.
    if ($this->usesFields() && $this->usesGrouping()) {
        $options = [
            '' => $this->t('- None -'),
        ];
        $field_labels = $this->displayHandler
            ->getFieldLabels(TRUE);
        $options += $field_labels;
        // If there are no fields, we can't group on them.
        if (count($options) > 1) {
            // This is for backward compatibility, when there was just a single
            // select form.
            if (is_string($this->options['grouping'])) {
                $grouping = $this->options['grouping'];
                $this->options['grouping'] = [];
                $this->options['grouping'][0]['field'] = $grouping;
            }
            if (isset($this->options['group_rendered']) && is_string($this->options['group_rendered'])) {
                $this->options['grouping'][0]['rendered'] = $this->options['group_rendered'];
                unset($this->options['group_rendered']);
            }
            $c = count($this->options['grouping']);
            // Add a form for every grouping, plus one.
            for ($i = 0; $i <= $c; $i++) {
                $grouping = !empty($this->options['grouping'][$i]) ? $this->options['grouping'][$i] : [];
                $grouping += [
                    'field' => '',
                    'rendered' => TRUE,
                    'rendered_strip' => FALSE,
                ];
                $form['grouping'][$i]['field'] = [
                    '#type' => 'select',
                    '#title' => $this->t('Grouping field Nr.@number', [
                        '@number' => $i + 1,
                    ]),
                    '#options' => $options,
                    '#default_value' => $grouping['field'],
                    '#description' => $this->t('You may optionally specify a field by which to group the records. Leave blank to not group.'),
                ];
                $form['grouping'][$i]['rendered'] = [
                    '#type' => 'checkbox',
                    '#title' => $this->t('Use rendered output to group rows'),
                    '#default_value' => $grouping['rendered'],
                    '#description' => $this->t('If enabled the rendered output of the grouping field is used to group the rows.'),
                    '#states' => [
                        'invisible' => [
                            ':input[name="style_options[grouping][' . $i . '][field]"]' => [
                                'value' => '',
                            ],
                        ],
                    ],
                ];
                $form['grouping'][$i]['rendered_strip'] = [
                    '#type' => 'checkbox',
                    '#title' => $this->t('Remove tags from rendered output'),
                    '#default_value' => $grouping['rendered_strip'],
                    '#states' => [
                        'invisible' => [
                            ':input[name="style_options[grouping][' . $i . '][field]"]' => [
                                'value' => '',
                            ],
                        ],
                    ],
                ];
            }
        }
    }
    if ($this->usesRowClass()) {
        $form['row_class'] = [
            '#title' => $this->t('Row class'),
            '#description' => $this->t('The class to provide on each row.'),
            '#type' => 'textfield',
            '#default_value' => $this->options['row_class'],
        ];
        if ($this->usesFields()) {
            $form['row_class']['#description'] .= ' ' . $this->t('You may use field tokens as per the "Replacement patterns" used in "Rewrite the output of this field" for all fields.');
        }
        $form['default_row_class'] = [
            '#title' => $this->t('Add views row classes'),
            '#description' => $this->t('Add the default row classes like @classes to the output. You can use this to quickly reduce the amount of markup the view provides by default, at the cost of making it more difficult to apply CSS.', [
                '@classes' => 'views-row',
            ]),
            '#type' => 'checkbox',
            '#default_value' => $this->options['default_row_class'],
        ];
    }
    if (!$this->usesFields() || !empty($this->options['uses_fields'])) {
        $form['uses_fields'] = [
            '#type' => 'checkbox',
            '#title' => $this->t('Force using fields'),
            '#description' => $this->t('If neither the row nor the style plugin supports fields, this field allows to enable them, so you can for example use groupby.'),
            '#default_value' => $this->options['uses_fields'],
        ];
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.