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

Таблица menu_tree_hash

Таблица menu_tree_hash является вспомогательной таблицей в Drupal, которая хранит MD5-хеши для каждого элемента меню. Основное её назначение - ускорение рендеринга меню за счёт кэширования. Система вычисляет хеш текущего состояния элемента меню (включая его детей) и сравнивает его с сохранённым значением. Если хеш не изменился, используется закэшированная версия, что позволяет избежать дорогостоящих операций по построению дерева меню.

Поля

Поле Тип данных Описание
menu_name varchar(32) Машинное имя меню (например, main, footer, account). Часть первичного ключа. Ссылается на таблицу menu_tree.
mlid int Уникальный идентификатор ссылки меню (Menu Link ID). Часть первичного ключа. Внешний ключ, который связывает хеш с конкретным элементом в таблице menu_tree.
hash varchar(64) MD5-хеш, вычисленный на основе данных элемента меню и всех его дочерних элементов. Хеш учитывает такие свойства, как активное состояние, вес, заголовок, путь и другие параметры, влияющие на отображение ссылки и её потомков.

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

Когда Drupal готовит меню для отображения, для каждого элемента вычисляется его текущий хеш. Этот хеш генерируется на основе данных из menu_tree и других связанных данных, которые могут повлиять на внешний вид или активное состояние ссылки (например, права доступа, текущий путь).

Перед построением дерева меню система проверяет, существует ли в menu_tree_hash запись для данной пары menu_name и mlid. Если запись существует и значение поля hash совпадает с только что вычисленным хешем, это означает, что элемент меню и его поддерево не изменились. В этом случае Drupal может использовать закэшированную HTML-разметку для этой части меню, что значительно ускоряет процесс.

Если хеши не совпадают или запись отсутствует, система заново строит эту часть меню, обновляет хеш в таблице menu_tree_hash и кэширует итоговый HTML. Такой механизм обеспечивает эффективное кэширование даже для очень больших и сложных меню.

Записи в этой таблице автоматически обновляются или удаляются при любых изменениях в структуре меню: добавлении, удалении или изменении ссылок, а также при очистке кэша.

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

Посмотреть хеши для всех элементов определённого меню можно следующим запросом:

SELECT mth.mlid, mth.hash, mt.title FROM menu_tree_hash mth INNER JOIN menu_tree mt ON mth.mlid = mt.mlid WHERE mth.menu_name = 'main' ORDER BY mth.mlid;

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

  • таблицу menu_tree,
    которая хранит основные данные элементов меню
  • таблицу menu_link_content,
    которая хранит данные для ссылок меню, созданных через интерфейс
  • таблицу cache_menu,
    которая хранит закэшированную HTML-разметку меню
  • таблицу router,
    которая хранит информацию о путях системы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить