НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
57 of 182 menu

Таблица menu_link_content

Таблица menu_link_content является основной таблицей для хранения пользовательских пунктов меню (тип сущности menu_link_content). Каждая запись в этой таблице представляет собой отдельный пункт, который может быть добавлен в любое меню, определенное в системе. Эти пункты меню управляются через административный интерфейс (Структура -> Меню) и, в отличие от пунктов меню, определяемых модулями (YAML-меню), могут быть легко изменены или удалены пользователем.

Поля

Поле Тип данных Описание
id serial Первичный ключ, уникальный идентификатор (ID) пункта меню.
revision_id int Внешний ключ, ссылающийся на menu_link_content_revision.mlid. Используется для системы ревизий, позволяющей отслеживать изменения пункта меню.
bundle varchar(255) Тип (бандин) пункта меню. По умолчанию используется значение menu_link_content. Позволяет при необходимости расширять функциональность через разные типы пунктов меню.
uuid varchar(128) Уникальный универсальный идентификатор (UUID) для данного пункта меню. Гарантирует уникальность в рамках всей системы, что важно для миграций и экспорта/импорта конфигурации.
langcode varchar(12) Языковой код пункта меню (например, en, ru). Позволяет создавать многоязычные меню.
enabled int Флаг, указывающий, включен ли пункт меню. 1 - включен (отображается), 0 - отключен (не отображается).
title varchar(255) Заголовок (название) пункта меню, который отображается пользователям.
description varchar(255) Описание пункта меню. Часто используется как текст всплывающей подсказки (title attribute) для ссылки.
menu_name varchar(255) Машинное имя меню, в которое добавлен данный пункт (например, main, footer, account).
link__uri varchar(2048) URI ссылки пункта меню. Может быть внутренним (например, internal:/node/1, entity:node/1) или внешним (https://example.com).
link__title varchar(255) Текст ссылки. Обычно дублирует поле title, но может быть переопределен.
link__options blob Сериализованный массив дополнительных опций для ссылки, таких как атрибуты HTML, параметры запроса и т.д.
external int Флаг, указывающий, является ли ссылка внешней. 1 - внешняя, 0 - внутренняя. Устанавливается автоматически на основе link__uri.
rediscover int Флаг, указывающий системе на необходимость "переоткрытия" пункта меню. Используется для динамически генерируемых пунктов меню.
weight int Вес пункта меню, определяющий его положение относительно других пунктов в том же меню и на том же уровне вложенности. Меньшие значения выводятся первыми.
expanded int Флаг, указывающий, должны ли дочерние пункты меню быть развернуты (видны) всегда, даже если родительский пункт не активен. 1 - развернут, 0 - свернут.
parent varchar(255) Идентификатор родительского пункта меню в формате menu_link_content:uuid. Определяет иерархию меню. Пустая строка означает, что пункт находится на верхнем уровне.
changed int Метка времени Unix, указывающая, когда запись была в последний раз изменена.
default_langcode int Флаг, указывающий, является ли текущая запись переводом для языка по умолчанию. 1 - да, 0 - нет.

Как это работает

Когда администратор сайта добавляет новый пункт меню через интерфейс (например, в меню "Основное"), создается новая запись в таблице menu_link_content. Система заполняет такие поля, как title, link__uri, menu_name, weight и parent.

При построении меню для отображения на странице Drupal загружает все включенные (enabled = 1) пункты для конкретного menu_name. Затем система упорядочивает их по полю weight и строит иерархию на основе поля parent.

Пункты меню из этой таблицы могут быть переведены на разные языки, если включены соответствующие модули. Для каждого перевода создается отдельная запись, связанная с оригиналом через id и помеченная соответствующим langcode.

Важное отличие пользовательских пунктов меню (хранящихся в menu_link_content) от пунктов, определяемых модулями (в YAML-файлах), заключается в том, что первые могут быть изменены через UI и их данные хранятся в базе данных, в то время как вторые управляются кодом и могут быть переопределены в дочерней теме или модуле.

Пример SQL-запроса

Выбрать все включенные пункты меню "Основное" с их родительскими элементами можно следующим запросом:

SELECT mlc.id, mlc.title, mlc.link__uri, mlc.weight, mlc.parent, parent_menu.title AS parent_title FROM menu_link_content mlc LEFT JOIN menu_link_content_field_data parent_menu ON mlc.parent = CONCAT('menu_link_content:', parent_menu.uuid) WHERE mlc.menu_name = 'main' AND mlc.enabled = 1 ORDER BY mlc.weight ASC;

Смотрите также

  • таблицу menu_link_content_data,
    которая содержит данные полей для пунктов меню
  • таблицу menu_tree,
    которая хранит оптимизированное дерево меню для быстрого построения
  • таблицу menu_link_content_revision,
    которая хранит ревизии пунктов меню
  • таблицу menu_link_content_field_revision,
    которая хранит ревизии данных полей пунктов меню
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить