Предположим у нас есть словарь таксономии с иерархией терминов.
- Легковые
- Мотоциклы и мототехника
- Квадроциклы
- Мотовездеходы
- Мотоциклы
- Грузовики и автобусы
- Автобусы
- Грузовики
- Прицепы
- Автодома
- Автодом
- Жилой модуль
- Трейлер
- Велосипеды
- Спецтехника
Иногда возникает неоходимость, разрешить пользователю выбор терминов только первого уровня.
Начинаем все как обычно. Стандартными средствами Друпал на форму создания/редактирования ноды добавляем поле c именем "field_kategory" типа "Ссылка на термин" (Term reference) и выбираем виджет "Выбор из списка" (см. скриншот).
Что бы ограничить вывод терминов только первого уровня можно использовать hook_form_alter или hook_form_FORM_ID_alter. Найти поле "field_kategory" и подменить значение свойства "#options" на массив терминов первого уровня.
Недостаток - если со временем понадобится применить это поле с другим типом материалов или термином - придется опять лезть в код модуля и добавлять обработку новой формы.
Мы пойдем похожим способом, но другим путем. Применим hook_field_widget_form_alter. Этот хук позволяет изменять виджеты полей перед выводом на форму.
function MYMODULE_field_widget_form_alter(&$element, &$form_state, $context) { if ($context['field']['field_name'] == 'field_kategory') { $voc_name = 'kategory'; //машинное имя словаря $vocabulary = taxonomy_vocabulary_machine_name_load($voc_name); if ($vocabulary) { $options=array(); //список терминов первого уровня из нашего словаря $terms = taxonomy_get_tree($vocabulary->vid,0,1); foreach($terms as $term){ $options[$term->tid]=$term->name; } $element['#options']=$options; } } }
Вот и все, наш чудо модуль готов. Теперь на всех формах, где выводится поле "field_kategory", список будет ограничен только терминами первого уровня вложенности. Даже на форме редактирования поля в пункте "Выбор значения по умолчанию".
Стоит отметить, что данный способ работает и для виджета "Флажки/Переключатели".
P.S. Если Вам необходимо запретить выбор терминов первого уровня, могу порекомендовать модуль Taxonomy container
Комментарии
singletonпн, 30/09/2013 - 22:48 #1
а если нужен только 1 и 3 уровень в одном из типов материалов?
Как сформировать options?
Женячт, 03/04/2014 - 22:20 #2
добрый день, а не подскажешь, как запретит выбор определенных терминов, или вообще их не выводить в списке терминов, при создании материала
Добавить комментарий