Модуль taxonomy предоставляет разработчикам Drupal 7 мощное API для управления словарями и терминами таксономии. В этой статье, мы рассмотрим только некоторые возможности.
Программное создание словаря таксономии
if (!taxonomy_vocabulary_machine_name_load('voc_name')) {$vocabulary = array('machine_name' => 'voc_name','name' => 'Название словаря',);$vocabulary = (object) $vocabulary;taxonomy_vocabulary_save($vocabulary);$vid = $vocabulary->vid;}
Для начала с помощью функции taxonomy_vocabulary_machine_name_load проверим на существование в системе словаря с нашим именем. Если такого словаря не существует, то создаём его, используя функцию taxonomy_vocabulary_save. Для этого нужно указать два параметра:
- Машинное имя словаря. В качестве имени должны выступать символы латинского алфавита, цифры и знак нижнего подчёркивания;
- Название словаря. Здесь можно использовать и символы кириллицы.
В переменной vid сохраняем идентификационный номер нашего нового словаря.
Программное создание термина таксономии
$term = array('name' => 'Название термина','vid' => $vid,'parent' => $tid,);$term = (object) $term;taxonomy_term_save($term);$tid = $term->tid;
Создаём новый термин таксономии с помощью функции taxonomy_term_save. Указываем название термина. Можно использовать символы кириллицы. Устанавливаем связь со словарём и родительским термином с помощью их идентификационных номеров. В переменной tid сохраняем идентификационный номер нового термина. Кго можно использовать в качестве родительского для построения иерархической структуры словаря таксономии. В примере показано как это реализовать.
Программное создание типа материала и добавление к нему поля типа таксономия
Программно создадим новый тип материала:
$type = array('type' => 'node_type_name','name' => st('Название типа материала'),'base' => 'node_content','description' => st('Описание типа материала'),'custom' => 1,'modified' => 1,'locked' => 0,);$type = node_type_set_defaults($type);node_type_save($type);
Для этого сначала нужно определись параметры для типа материала. Устанавливаем машинное имя. Напоминаю, что для машинного имени нужно использовать символы латинского алфавита, цифры и знак нижнего подчёркивания. Добавляем название типа материала и его описание. Здесь вместо функции t для использования многоязыковых строк рекомендуется использовать аналогичную функцию st. Далее устанавливаем базовый тип материала и другие параметры.
Значения по умолчанию для нового типа материала можно установить с помощью функции node_type_set_defaults. Воспользуемся этой возможностью, чтобы не заполнять все параметры вручную.
В завершение сохраняем тип материала используя функцию node_type_save.
Программно добавляем поле для нашего типа материала:
$field = field_info_field('field_taxonomy_voc');if (empty($field)) {$field = array('field_name' => 'field_taxonomy_voc','type' => 'taxonomy_term_reference','settings' => array('allowed_values' => array(array('vocabulary' => 'voc_name','parent' => 0,),),),'module' => 'taxonomy',);$field = field_create_field($field);}
В начале проверяем существует ли наше поле. Это можно сделать, воспользовавшись функцией field_info_field. В качестве параметра передаём имя нашего будущего поля. Если поле не найдено, то создаём его. Для этого лучше использовать функцию field_create_field. Только необходимо перед её вызовом нужно устанавить параметры нового поля. Устанавливаем название поля и его тип, в нашем случае это будет taxonomy_term_reference. Добавим настройки поля и передаём все параметры в функцию field_create_field.
Одного создания поля недостаточно, нужно установить отображение этого поля. Добавим следующий код:
$instance = field_info_instance('node', 'field_taxonomy_voc', $type->type);if (empty($instance)) {$instance = array('field_name' => 'field_taxonomy_voc','entity_type' => 'node','bundle' => $type->type,'label' => 'Термины таксономии','required' => 1,'widget' => array('type' => 'options_buttons','module' => 'options',),'display' => array('default' => array('label' => 'hidden','type' => 'taxonomy_term_reference_link','module' => 'taxonomy',),'teaser' => array('label' => 'hidden','type' => 'hidden',),),);$instance = field_create_instance($instance);}
По аналогии с предыдущим примером, необходимо сначала проверить существует ли отображение для нашего поля. По логике, если до этого момента поля не существовало, то и проверять на существование отображения смысла нет. Но я думаю, то проверка лишней не будет. Воспользуемся функцией field_info_instance.
Мы проверили что отображения не существует. Теперь нужно его добавить. Легко догадаться, что функция будет называться field_create_instance. Также нужно добавить параметры к этой функции. Параметров будет немного больше. Установим связь с полем и типом материала. Добавим описание для отображения. Сделаем поле обязательным для заполнения. Определим тип виджета для отображения. В нашем случае, это будет Флажки / Радио-кнопки. Последний параметр отвечает за стиль отображения по-умолчанию и в анонсе.