Программное создание словарей и терминов таксономии в Drupal 7

NovaInfo 9, скачать PDF
Опубликовано
Раздел: Технические науки
Просмотров за месяц: 1
CC BY-NC

Аннотация

В статье рассматривается технология работы со словарями и терминами таксономии.

Ключевые слова

DRUPAL 7, TAXONOMY, ТАКСОНОМИЯ, ТИП МАТЕРИАЛА

Текст научной работы

Модуль 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. Для этого нужно указать два параметра:

  1. Машинное имя словаря. В качестве имени должны выступать символы латинского алфавита, цифры и знак нижнего подчёркивания;
  2. Название словаря. Здесь можно использовать и символы кириллицы.

В переменной 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. Также нужно добавить параметры к этой функции. Параметров будет немного больше. Установим связь с полем и типом материала. Добавим описание для отображения. Сделаем поле обязательным для заполнения. Определим тип виджета для отображения. В нашем случае, это будет Флажки / Радио-кнопки. Последний параметр отвечает за стиль отображения по-умолчанию и в анонсе.

Читайте также

Цитировать

Долганов, А.А. Программное создание словарей и терминов таксономии в Drupal 7 / А.А. Долганов. — Текст : электронный // NovaInfo, 2012. — № 9. — URL: https://novainfo.ru/article/1488 (дата обращения: 12.08.2022).

Поделиться