Drupal: Раскрытый фильтр по заголовкам, отображаемый в виде выпадающего списка

Если вам нужно создать раскрытый фильтр работающий по заголовку материала, то встроенных стредтв представлений Drupal вам будет наверняка недостаточно. Все, что вы сможете сделать стандартными средствами - это текстовое поле, при вводе текста в которе будут выводиться найденные совпадения. Это очень неудобно, так как вы можете и не знать конкретно что искать, поэтому гораздо проще выбрать в выпадающем списке готовое название, или имя, чем гадать и вводить то-же самое с клавитуры.

Создайте представление

Для того, чтоб реализовать такого рода фильтр, потребуется создать представление, содержащее два отображения:

  1. Первое отображение-страница, формат которого не важен. К этому отображению применен контекстный фильтр, источником информации которого будет адресная строка, которую мы будем подготавливать во втором отображении.
  2. Второе, отображение-блок, выводится в формате Меню перехода. При выборе любого из пунктов данного меню, производится переадресация на другую страницу, адрес которой вы можете корректировать, что и дает возможность задать параметры, которые нужны контекстному фильтру первого отображения.

Давайте теперь рассмотрим все это более детально:

  1. Загрузите и установите модуль Ctools (Chaos Tools). Найдите его среди списка установленных модулей и включите. После вуключения, в окне редактирования представления появится еще один формат отображения, Меню перехода (Jump menu).
  2. Создайте представление, имеющее отображение-блок, тип отображаемого материала выберите сами (ноды, пользователи и так далее, в зависимости от того, что вам нужно выводить на странице). В данном случае я буду выводить ноды.
  3. В настройках формата отображения выберите  Меню перехода (Jump Menu). В настройках данного формата убедитесь, что в выпадающем списке Путь поля выбрано значение Содержимое:Nid.
  4. В данном отображении понадобятся только два поля: Содержимое:Заголовок и Содержимое:Nid. В настройках поля Содержимое:Nid установите чекбоксы Исключить из вывода и Перезаписать содержимое.
  5. В появившемся поле Текст введите адрес, предположим это kabinet/profile/[nid].
  6. Задайте данному блоку имя, например Выпадающий список и сохраните его.
  7. Разместите блок Выпадающий список в одном из регионов вашей темы, например в левом сайдбаре. В настройках блока укажите адреса, на которых блок должен отображаться. Можете проверить его работу - при выборе любого пункта вас будет перенаправлено на другую страницу, типа /kabinet/profile/146.
  8. Создайте новое отображение, выводимое в виде страницы. В разделе Настройки страницы укажите Путь, открыв который вы будете видеть наднное отображение (в моем случае это kabinet/profile).
  9. добавте контекстный фильтр Содержимое: Nid. В настройках фильтра укажите:

    • Когда значение фильтра НЕ доступно -  Передать значение по умолчанию - ID материала из URL.
  10. Настройте остальные параметры представления (поля и так далее).
  11. Сохраните представление, и убедитесь что все работает правильно, выбрав в выпадающем списке какой-либо из пунктов.

Кладезь знаний

Как установить значение по умолчанию

function mymodule_form_ctools_jump_menu_alter(&$form, &$form_state, $form_id){
 
  foreach ($form['jump']['#options'] as $key => $value) {
    $target = explode("::", $key);

    if(isset($target[1]) && !empty($target[1])){
      if(trim($target[1], '/') == session_save("selected_artist")){
        $form['jump'] ['#default_value'] = $key;
      }
    }
  }
}

Ссылки по теме

https://www.drupal.org/node/1841624

Тэги: 

Добавить комментарий

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <s> <u> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <hr> <dd> <sub> <sup>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Защита от СПАМ ботов. Подтвердите, пожалуйста, что вы человек.
5 + 1 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.