Таблица menu_link_content_data
Таблица menu_link_content_data является центральным хранилищем для пользовательских элементов меню в Drupal. В отличие от системных ссылок меню, которые определяются кодом модулей, записи в этой таблице создаются, редактируются и удаляются пользователями через административный интерфейс. Каждая запись представляет собой отдельную ссылку в меню.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
id |
varchar(255) |
Уникальный идентификатор ссылки меню в формате UUID. Является первичным ключом таблицы. |
bundle |
varchar(128) |
Тип (бандин) ссылки меню. По умолчанию используется значение menu_link_content.
|
uuid |
varchar(128) |
Уникальный универсальный идентификатор (UUID) для данной сущности ссылки меню. |
langcode |
varchar(12) |
Код языка, к которому привязана данная ссылка меню. Поддерживает многоязычность. |
enabled |
tinyint |
Флаг, указывающий, включена ли ссылка меню (1) или отключена (0). Отключенные ссылки не отображаются в меню.
|
title |
varchar(255) |
Заголовок ссылки меню, который отображается пользователям. |
description |
varchar(255) |
Описание ссылки меню, которое может отображаться в виде всплывающей подсказки. |
menu_name |
varchar(255) |
Машинное имя меню, к которому принадлежит данная ссылка (например, main, footer, account).
|
link__uri |
varchar(2048) |
URI ссылки в формате Drupal (например, internal:/node/1, entity:node/1, https://example.com).
|
link__title |
varchar(255) |
Заголовок ссылки, используемый для атрибута title.
|
link__options |
blob |
Сериализованный массив дополнительных опций для ссылки, таких как атрибуты HTML, параметры запроса и др. |
external |
tinyint |
Флаг, указывающий, является ли ссылка внешней (1) или внутренней (0).
|
rediscover |
tinyint |
Флаг, указывающий, должна ли система пытаться переобнаружить ссылку при очистке кеша. |
weight |
int |
Вес ссылки, определяющий её положение в меню относительно других элементов. Элементы с меньшим весом выводятся выше. |
expanded |
tinyint |
Флаг, указывающий, должно ли меню быть развернуто, если данный элемент является родительским (1) или свернуто (0).
|
parent |
varchar(255) |
Идентификатор родительского элемента меню в формате menu_link_content:UUID. Определяет иерархию меню.
|
changed |
int |
Метка времени Unix, указывающая, когда ссылка была в последний раз изменена. |
default_langcode |
tinyint |
Флаг, указывающий, является ли данная запись переводом (0) или записью на языке по умолчанию (1).
|
Как это работает
Когда пользователь создает новую ссылку меню через административный интерфейс Drupal (/admin/structure/menu/item/add/*), система создает новую запись в таблице menu_link_content_data. Каждой ссылке присваивается уникальный UUID, который используется для идентификации throughout системе.
Поле menu_name определяет, к какому конкретному меню принадлежит ссылка. Это позволяет иметь разные наборы ссылок для основного меню, меню футера, пользовательского меню и других.
Иерархическая структура меню формируется через поле parent, где хранится UUID родительского элемента. Если поле parent пустое, элемент считается корневым. Вес элемента (weight) определяет порядок отображения элементов внутри одного уровня иерархии.
Drupal использует систему производных (derivatives) для меню. Пользовательские ссылки из menu_link_content_data объединяются с системными ссылками из menu_tree для формирования полного дерева меню, которое кэшируется для повышения производительности.
Пример SQL-запроса
Получить все включенные ссылки для главного меню с их родительскими элементами можно следующим запросом:
SELECT
m1.id,
m1.title,
m1.link__uri,
m1.weight,
m2.title as parent_title
FROM menu_link_content_data m1
LEFT JOIN menu_link_content_data m2 ON m1.parent = CONCAT('menu_link_content:', m2.uuid)
WHERE m1.menu_name = 'main'
AND m1.enabled = 1
ORDER BY m1.weight ASC;
Смотрите также
-
таблицу
menu_tree,
которая хранит системные определения ссылок меню -
таблицу
menu_tree_hash,
которая используется для кэширования иерархии меню -
таблицу
menu_link_content_revision,
которая хранит ревизии изменений ссылок меню -
таблицу
menu_link_content__menu_parent,
которая хранит данные о родительских элементах меню