Drupal API функции для работы с таксономией

Drupal 7 поддерживает работу с таксономией на уровне ядра (модуль taxonomy), предоставляя богатый арсенал функций.

Здесь мы рассмотрим только функции, связанные с работой непосредственно с  данными. Описание taxonomy hooks (программных зацепок) вы можете посмотреть на api.drupal.org.

Полный перечень функций вы найдете там же — taxonomy module api.

Итак, первое что может оказать полезным в работе — это получение списков таксономий и описаний словарей.

Список всех словарей

Этот перечень может быть получен функцией taxonomy_get_vocabularies(). Вы получите массив объектов, описывающих все словари.

Вот пример возвращаемых данных:

Более краткую информацию можно получить функцией taxonomy_vocabulary_get_names(). Она возвращает только системные имена (machine_name) и названия существующих словарей сайта.

Пример данных:

CRUD операции для словарей

По аналогии с терминологией, используемой для баз данных, со словарем можно выполнить все необходимые операции.

taxonomy_vocabulary_delete($vid); — удаление по vocabulary_id

taxonomy_vocabulary_load($vid);  — загрузка данных об одном словаре по указанному vid. Возвращает один объект аналогичной струкруры как taxonomy_get_vocabularies.

taxonomy_vocabulary_machine_name_load($machine_name); — тоже самое, но по машинному имени. Очень удобно, когда нужно отвязаться от конкретного идентификатора словаря.

taxonomy_vocabulary_load_multiple($vids = array(), $conditions = array()) ; — получение данных сразу о нескольких словарях. На самом деле эта функция используется как основа для прочих (таких как taxonomy_vocabulary_load, taxonomy_get_vocabularies).

В качестве условий (массив conditions) используются имена полей сущности taxonomy. Примеры:

taxonomy_vocabulary_save($taxonomy_object); — загруженный объект, после изменений можно сохранить данной функцией. Если требуется создать новый словарь, то нужно удалить значение $vid из объекта.

Пример, создания словаря:

Т.е. словарь из кода может быть создан даже без названия, только с machine_name. Но в админке CMS попросит указать человеко-читаемое название, т.к. поле обязательное для заполнения.

CRUD операции для термина словаря

Drupal предоставляет следующие API функции для манипуляций с отдельными терминами.

taxonomy_term_delete($tid); — удаляет термин с указанным $tid из базы данных.

taxonomy_term_load($tid); — загружает термин по $tid (вернет false, если термина с таким id нет). Кроме основных полей, здесь могут быть данные, предоставленные сторонними модулями.

Например, у меня есть словарь соц. сетей, с парой терминов

Я, зная tid термина «instagram», запрашиваю информацию о нем:

Drupal вернет вот такой объект:

Если словарь имеет дополнительные поля (настроенные в CMS — в примере это field_term_sn_source), то вы получите и их.

taxonomy_term_save($term_object); — позволяет сохранить модифицированный термин или создать новый.

Пример создания термина:

При сохранении объект термина будет модифицирован, Drupal добавит кучу данных, сработают зацепки различных contributed модулей. Так можно получить ID термина сразу после создания. Вот пример состояния объекта после операции сохранения:

Различные выборки и подмножества терминов

taxonomy_term_load_multiple($tids = array(), $conditions = array()); — загрузка множества терминов по массиву id. Возможно указание дополнительных условий. Условия работают по той же схеме, что и в случае словарей.

taxonomy_get_term_by_name($name, $vocabulary = NULL); — пытается найти термин по названию. Можно даже не указывать словарь (требуется машинное имя словаря), в котором искать. Поиск не зависит от регистра, потому значений может быть найдено несколько.

Попробуем найти термин, созданный в предыдущем примере:

Структура результата запроса:

taxonomy_get_children($tid, $vid = 0); — получение списка дочерних терминов, структура результата как на предыдущем скриншоте — массив терминов. С помощью vid можно ограничить поиск дочерних терминов каким то одним словарем.

taxonomy_get_parents($tid); — поиск непосредственных родителей термина. Структура таксономии Drupal позволяет иметь термину более одного непосредственного родителя.

taxonomy_get_parents_all($tid); — поиск всех родителей термина (т.е. и родителей родителей).

taxonomy_get_tree($vid, $parent = 0, $max_depth = NULL, $load_entities = FALSE); — грузит все термины словаря (в общем случае).

Вы можете указать максимальную глубину и корень (tid) таксономии, от которого строится «дерево». Функция возвращает в любом случае плоский список (т.е. массив) терминов, иерархию придется выяснять, анализирую свойства depth и parents. $load_entities — позволяет указать грузить ли дополнительные поля, созданные в конструкторе полей CMS.

Дополнительные функции для работы с терминами таксономии Drupal

Есть ещё некоторые функции, которые можно отнести к сервисным.

taxonomy_select_nodes($tid, $pager = TRUE, $limit = FALSE, $order = array(‘t.sticky’ => ‘DESC’, ‘t.created’ => ‘DESC’)); — выбирает список нод, связанных с указанным термином.  Результат — массив nid.

taxonomy_implode_tags($tags, $vid = NULL); — создаёт строку из названий терминов, разделенных запятыми. Если указать vid, то переданные термины будут отфильтрованы по vid. Функция ожидает, что $tags — массив объектов терминов.

Написать комментарий

Мало букафф? Читайте есчо !

Вывод результатов формы в саму форму после submit

Март 2, 2017 г.

Что делают в большинстве случаев после успешного submit данных формы? Вариантов два - либо показывают системное сообщение drupal_set_messge(), либо производят переадресацию на некую страницу с результатами. Первый вариант почти всегда выглядит неказисто, ...

Читать

Программно выводим блок в Drupal

Февраль 7, 2019 г.

Если вы решили вывести блок, реализованный в каком либо модуле, программно, то следующие  примеры кода помогут вам. Используя block API Запрашиваем данные блока через API, готовим массив для последующего рендеринга: [crayon-66a45b42e2d0d425614875/] ...

Читать

 

Комментарии к «Drupal API функции для работы с таксономией»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: