Главная/Статьи/Drupal показываем родителя в раскрытом фильтре по словарю таксономии
Drupal

Drupal показываем родителя в раскрытом фильтре по словарю таксономии

Раскрытые фильтры в таксономии не предоставляют возможности отслеживать иерархию. Однако дочерние термины помечаются дефисами, что можно использовать для решения задачи — отобразить родительский регион рядом с вложенным городом.

Например, вместо просто «Москва» в выпадающем списке будет отображаться «Москва (Центральный округ)». Добавьте следующий код в кастомный модуль:

function MYMODULE_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
  $parent = '';
  $options = $form['tid']['#options'];
  foreach ($options as $index => $option) {
    if (is_object($option)) {
      $label = reset($option->option);
      $key = key($option->option);
      if (substr($label, 0, 1) != '-') {
        $parent = $label;
      }
      else {
        $options[$index]->option[$key] = $options[$index]->option[$key] . " ($parent)";
      }
    }
  }
}

Логика проста: в цикле перебираем все опции фильтра. Если термин не начинается с дефиса — это родитель, запоминаем его. Если начинается с дефиса — это дочерний термин, добавляем к нему имя родителя в скобках.

После реализации модуля не забудьте очистить кэш Drupal, чтобы увидеть результат.