Стажировка на реальных проектах:
наполнение портфолио, помощь с работой и заказами, пробные собеседования. Жми для подробностей→
51 of 182 menu
Бесплатный курс: Практика на Реальных Проектах и Работы в Портфолио! Начало 11 ноября. Жми для записи!

Таблица 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,
    которая хранит ревизии данных полей для кастомных блоков