public function SortWidgetBase::exposedFormAlter in Better Exposed Filters 8.5
Same name and namespace in other branches
- 8.4 src/Plugin/better_exposed_filters/sort/SortWidgetBase.php \Drupal\better_exposed_filters\Plugin\better_exposed_filters\sort\SortWidgetBase::exposedFormAlter()
Manipulate views exposed from element.
Parameters
array $form: The views configuration form.
\Drupal\Core\Form\FormStateInterface $form_state: Form state.
Overrides BetterExposedFiltersWidgetInterface::exposedFormAlter
3 calls to SortWidgetBase::exposedFormAlter()
- DefaultWidget::exposedFormAlter in src/
Plugin/ better_exposed_filters/ sort/ DefaultWidget.php - Manipulate views exposed from element.
- Links::exposedFormAlter in src/
Plugin/ better_exposed_filters/ sort/ Links.php - Manipulate views exposed from element.
- RadioButtons::exposedFormAlter in src/
Plugin/ better_exposed_filters/ sort/ RadioButtons.php - Manipulate views exposed from element.
3 methods override SortWidgetBase::exposedFormAlter()
- DefaultWidget::exposedFormAlter in src/
Plugin/ better_exposed_filters/ sort/ DefaultWidget.php - Manipulate views exposed from element.
- Links::exposedFormAlter in src/
Plugin/ better_exposed_filters/ sort/ Links.php - Manipulate views exposed from element.
- RadioButtons::exposedFormAlter in src/
Plugin/ better_exposed_filters/ sort/ RadioButtons.php - Manipulate views exposed from element.
File
- src/
Plugin/ better_exposed_filters/ sort/ SortWidgetBase.php, line 157
Class
- SortWidgetBase
- Base class for Better exposed pager widget plugins.
Namespace
Drupal\better_exposed_filters\Plugin\better_exposed_filters\sortCode
public function exposedFormAlter(array &$form, FormStateInterface $form_state) {
$is_collapsible = $this->configuration['advanced']['collapsible'] && !empty($this->configuration['advanced']['collapsible_label']);
$is_secondary = !empty($form['secondary']) && $this->configuration['advanced']['is_secondary'];
// Check for combined sort_by and sort_order.
if ($this->configuration['advanced']['combine'] && !empty($form['sort_order'])) {
$options = [];
$selected = '';
foreach ($form['sort_by']['#options'] as $by_key => $by_val) {
foreach ($form['sort_order']['#options'] as $order_key => $order_val) {
// Use a space to separate the two keys, we'll unpack them in our
// submit handler.
$options[$by_key . '_' . $order_key] = "{$by_val} {$order_val}";
if ($form['sort_order']['#default_value'] === $order_key && empty($selected)) {
// Respect default sort order set in Views. The default sort field
// will be the first one if there are multiple sort criteria.
$selected = $by_key . '_' . $order_key;
}
}
}
// Rewrite the option values if any were specified.
if (!empty($this->configuration['advanced']['combine_rewrite'])) {
$options = BetterExposedFiltersHelper::rewriteOptions($options, $this->configuration['advanced']['combine_rewrite'], TRUE);
if (!isset($options[$selected])) {
// Avoid "illegal choice" errors if the selected option is
// eliminated by the rewrite.
$selected = NULL;
}
}
// Add reset sort option at the top of the list.
if ($this->configuration['advanced']['reset']) {
$options = [
' ' => $this->configuration['advanced']['reset_label'],
] + $options;
}
$form['sort_bef_combine'] = [
'#type' => 'select',
'#options' => $options,
'#default_value' => $selected,
// Already sanitized by Views.
'#title' => $form['sort_by']['#title'],
];
// Add our submit routine to process.
$form['#submit'][] = [
$this,
'sortCombineSubmitForm',
];
// Pretend we're another exposed form widget.
$form['#info']['sort-sort_bef_combine'] = [
'value' => 'sort_bef_combine',
];
// Remove the existing sort_by and sort_order elements.
unset($form['sort_by']);
unset($form['sort_order']);
}
else {
// Add reset sort option if selected.
if ($this->configuration['advanced']['reset']) {
array_unshift($form['sort_by']['#options'], $this->configuration['advanced']['reset_label']);
}
}
// If selected, collect all sort-related form elements and put them in a
// details element.
if ($is_collapsible) {
$form['bef_sort_options'] = [
'#type' => 'details',
'#title' => $this->configuration['advanced']['collapsible_label'],
];
if ($is_secondary) {
// Move secondary elements.
$form['bef_sort_options']['#group'] = 'secondary';
}
}
// Iterate over all exposed sort elements.
foreach ($this->sortElements as $element) {
// Sanity check to make sure the element exists.
if (empty($form[$element])) {
continue;
}
// Move collapsible elements.
if ($is_collapsible) {
$this
->addElementToGroup($form, $form_state, $element, 'bef_sort_options');
}
elseif ($is_secondary) {
$this
->addElementToGroup($form, $form_state, $element, 'secondary');
}
// Finally, add some metadata to the form element.
$this
->addContext($form[$element]);
}
}