Таблица block
Таблица block является центральным хранилищем метаинформации о блоках в Drupal. Она не хранит содержимое блоков, а содержит их настройки: регион размещения, видимость, вес и связь с темой оформления.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
id |
varchar(128) |
Уникальный машинный идентификатор блока. Для блоков, предоставляемых модулями, обычно имеет вид module_name:delta. |
theme |
varchar(128) |
Машинное имя темы оформления, для которой определено данное размещение блока. Ссылается на таблицу block_theme.
|
status |
tinyint |
Статус блока: 0 - отключен, 1 - включен.
|
weight |
int |
Вес блока, определяющий его порядок относительно других блоков в том же регионе. Меньшие значения выводятся первыми. |
region |
varchar(64) |
Регион темы, в котором размещается блок (например, sidebar_first, content, footer). Значение -1 означает, что блок не назначен ни в один регион (отключен).
|
custom |
tinyint |
Флаг, указывающий тип блока: 0 - блок, предоставленный модулем, 1 - кастомный блок, созданный через административный интерфейс.
|
visibility |
tinyint |
Тип настройки видимости блока: 0 - показывать на всех страницах, кроме перечисленных, 1 - показывать только на перечисленных страницах, 2 - использовать настраиваемую логику видимости (PHP код).
|
pages |
text |
Список путей страниц, на которых блок должен отображаться или не отображаться (в зависимости от значения visibility). Пути разделяются переводом строки.
|
title |
varchar(255) |
Заголовок блока, который будет отображаться пользователю. Если значение равно <none>, заголовок скрывается.
|
Как это работает
Когда модуль определяет новый блок, используя hook_block_info(), он регистрирует его в системе. Однако запись в таблице block появляется только после того, как блок будет размещен в каком-либо регионе темы через административный интерфейс (admin/structure/block) или программно.
Каждая тема оформления может иметь собственный набор настроек для одних и тех же блоков. Поэтому для одного машинного имени блока id в таблице может существовать несколько записей с разными значениями theme.
При отрисовке страницы система для текущей темы выбирает все блоки с status = 1 и region != -1, сортирует их по полю weight и проверяет условия видимости (visibility и pages). Toлько после этого контент блока запрашивается и выводится в соответствующем регионе.
Важно различать определение блока (которое предоставляет модуль) и его размещение (которое хранится в этой таблице). Удаление модуля не всегда автоматически удаляет соответствующие записи из block, что может привести к ошибкам в базе данных.
Пример SQL-запроса
Выбрать все активные блоки для темы bartik, отсортированные по региону и весу:
SELECT id, region, weight, title, status
FROM block
WHERE theme = 'bartik'
AND status = 1
AND region != '-1'
ORDER BY region, weight;
Смотрите также
-
таблицу
block_custom,
которая хранит содержимое кастомных блоков -
таблицу
block_content,
которая является центральной для сущностей блоков в Drupal -
таблицу
block_content_field_data,
которая хранит данные полей для кастомных блоков -
таблицу
block_content_field_revision,
которая хранит ревизии данных полей для кастомных блоков