Search by

besnovatyj / yii2-cms-blocks

besnovatyj

Модуль блоков Yii2 CMS: управляемое из админки содержимое мест, объявленных темой

Package info

github.com/besnovatyj/yii2-cms-blocks

Type:yii2-extension

pkg:composer/besnovatyj/yii2-cms-blocks

Statistics

Installs: 3

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.1.0 2026-10-03 14:10 UTC

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 на проде).