besnovatyj / yii2-cms-blocks
Модуль блоков Yii2 CMS: управляемое из админки содержимое мест, объявленных темой
Package info
github.com/besnovatyj/yii2-cms-blocks
Type:yii2-extension
pkg:composer/besnovatyj/yii2-cms-blocks
Requires
- php: >=8.4
- besnovatyj/yii2-cms-backend-widgets: ^1.0
- besnovatyj/yii2-cms-contracts: ^3.0
- besnovatyj/yii2-cms-datetime-widgets: ^1.0
- besnovatyj/yii2-cms-editor: ^1.0
- besnovatyj/yii2-cms-forms: ^1.0
- besnovatyj/yii2-cms-kernel: ^1.2
- yiisoft/yii2: ~2.0.0
- yiisoft/yii2-bootstrap5: ~2.0.0
Requires (Dev)
- roave/security-advisories: dev-latest
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-03 14:24:19 UTC
README
Модуль блоков — управляемое из админки содержимое мест, которые объявляет тема (аналог widget areas в WordPress).
Зачем
Тема не может заводить свои CRUD в админке, а вещей вида «объявление над шапкой», «всплывающее окно», «текст в колонке подвала» у неё много. Тема объявляет места, модуль хранит их начинку.
Как это устроено
| Роль | Кто | Что делает |
|---|---|---|
| Место | тема | объявляет его в areas.php и вызывает BlockArea::widget(['area' => '…']) в разметке |
| Каркас | тема | обёртка, кнопки, id для скриптов, всё, что не должно ломаться правкой текста |
| Блок | этот модуль | начинка места: HTML из редактора, статус, окно показа, порядок |
| Заготовка | тема → пикер сниппетов | разметка начинки в стиле темы, с которой удобно начать |
- Каталог мест приходит через контракт
Besnovatyj\Contracts\theme\ThemeAreaCatalog, реализация — в пакете тем (yii2-cms-themes). Пакета тем нет: место задаётся в блоке вручную. - Блоки в месте выводятся подряд по
sort_order; выключенные и вне окна показа пропускаются. Блок в месте, которое активная тема не объявляет, хранится, но не выводится (админка это показывает). - Кэш: все включённые блоки — один элемент кэша на все места с тегом
blocks, сбрасывается при любой правке. Окно показа проверяется на каждый запрос, поэтому наступившая дата не ждёт сброса. - Шорткоды: текстовые (
%name%) разворачиваются при выводе, если подключён модуль шорткодов.
Блоки ≠ шорткоды ≠ сниппеты
- Шорткод — плейсхолдер в контенте, разворачивается в код при рендере (контент → код).
- Место — «дырка» в коде темы, которую заполняет контент из админки (код → контент).
- Сниппет — заготовка разметки, вставляемая в редактор при правке.
Механизмы компонуются: блок набирают со сниппета темы, внутри могут быть текстовые шорткоды.
Вывод в теме
use Besnovatyj\Blocks\widgets\BlockArea; <?php $content = BlockArea::widget(['area' => 'popup-bar']); ?> <?php if ($content !== ''): ?> <div class="…"><?= $content ?></div> <?php endif; ?>
inline => true снимает с начинки обёртку <p>, если блок — один абзац без атрибутов: для мест,
которые встают в строку (копирайт, заголовок).
Объявление мест в теме
themes/{тема}/areas.php:
return [ 'popup-bar' => ['label' => 'Полоса над шапкой', 'hint' => 'Текст объявления и кнопка-ссылка', 'sort' => 10], ];
Установка
modman install Blocks + recompile (+ reload php-fpm на проде).