trainbrain / yii2-module-blocks
Blocks module for Yii2
This package is not auto-updated.
Last update: 2025-07-05 21:18:24 UTC
README
Модуль позволяет создавать различные типы блоков, и выводить их с помощью виджетов, как по одному, так и группами с использованием собственных шаблонов.
Установка
Рекомендуемый способ установки через composer.
php composer.phar require --prefer-dist branchup/yii2-module-blocks "*"
или добавить
"branchup/yii2-module-blocks": "*"
В composer.json
файл.
Далее следует выполнить миграцию через консоль:
php yii migrate
Конфигурация
В конфиг backend/frontend части нашего проекта подключаем модуль:
'modules' => [
'blocks' => [
'class' => 'branchup\blocks\Module',
],
],
После этого станут доступными страницы для управления блоками и их группами, по таким URL:
/blocks
/blocks/group
Дополнительная конфигурация модуля
При подключении модуля в конфиге проекта, помимо стандартных настроек, можно использовать следующие опции:
modelMap
: (array) Ассоциативный массив, где есть возможность переопределить модели использующиеся в этом модуле.urlPrefix
: (string) Префикс который будет использован при построении urlRules.urlRules
: (array) Перечень URL правил для этого модуляuploadPath
: (string) Путь для загрузки файлов, используется для виджета CKEditor.allowExtensions
: (array) Массив со списком допустимых форматов файлов для загрузки.widgetsViewPath
: (string) Путь для переопределения представлений виджетовlanguages
: (boolean) МультиязычностьimagesDir
: (string) Папка сохранения изображений, относительно корня сайтаimagesBasePath
: (string) Путь к корню сайтаYii::getAlias('@frontend/web')
imagesBaseUrl
: (string) Алиас домена сайтаYii::getAlias('@frontendUrl')
Мультиязычность
Для мультиязычности необходимо чтобы на сайте был подключен модуль yii2-module-languages
Типы блоков
Есть возможность создавать свои типы блоков, для этого в params.php конфиге проекта нужно использовать следующую конструкцию:
'blocks' => [
[
'name' => 'phones',
'label' => 'Телефон',
'single_block' => true,
'fields' => [
'phone' => [
'type' => kartik\builder\Form::INPUT_TEXT,
'label' => 'Телефон',
],
],
],
[
'name' => 'menu',
'label' => 'Меню',
'fields' => [
'label' => [
'type' => kartik\builder\Form::INPUT_TEXT,
'label' => 'Название пункта меню',
],
'url' => [
'type' => kartik\builder\Form::INPUT_TEXT,
'label' => 'Ссылка',
],
],
],
[
'name' => 'text_block',
'label' => 'Текстовый блок',
'fields' => [
'text' => [
'type' => kartik\builder\Form::INPUT_WIDGET,
'widgetClass' => 'mihaildev\ckeditor\CKEditor',
'label' => 'Текст',
]
],
],
// пример блока с выключением мультиязычности для поля
[
'name' => 'menu',
'label' => 'Меню',
'fields' => [
'url' => [
'type' => kartik\builder\Form::INPUT_TEXT,
'label' => 'Ссылка',
'disableLanguages' => true,
],
'label' => [
'type' => kartik\builder\Form::INPUT_TEXT,
'label' => 'Название',
],
],
],
// пример блока с изображениями
[
'name' => 'images',
'label' => 'Изображения',
'fields' => [
'label' => [
'type' => kartik\builder\Form::INPUT_TEXT,
'label' => 'Название',
],
'images' => [
'type' => branchup\blocks\models\Block::GALLERY_TYPE,
'label' => 'Изображения',
'disableLanguages' => true,
],
],
],
],
Тип блока имеет такие свойства:
name
: (string) Уникальное наименование блока, должно быть указано латиницей.label
: (string) Название типа блока, которое будет отображаться в админ панели.single_block
: (boolean) Если установлен какtrue
, то блок с этим типом может существовать в единственном экземпляре. По умолчаниюfalse
.fields
: (array) Ассоциативный массив с перечнем полей, присутствующих в этом типе блока. Ключ будет использован в качестве атрибутаname
поля.label
: (string) Значение этого поля будет использовано в качестве тегаlabel
сопутствующего соответствующему полю.type
: (string) Рекомендуется использовать в качестве значения, константу из класса kartik\builder\Form, т.к. этот пакет подтягивается в зависимостях, и именно этот пакет используется для построения полей, при создании/редактировании блоков.widgetClass
: (string) Используется только в случае когдаtype
указан какkartik\builder\Form::INPUT_WIDGET,
то есть для поля мы хотим использовать собственный виджет. С помощью этого свойства мы можем указать какой именно виджет необходимо использовать.disableLanguages
: (boolean) Используется, если надо убрать мультиязычность для этого поля- Про остальные не обязательные свойства можно узнать в документации Form Builder
Виджеты
BlockView
Виджет который используется для вывода блока в единственном экземпляре. Пример использования:
use branchup\blocks\widgets\BlockView;
<?= BlockView::widget([
'view' => 'phone',
'condition' => [
'alias' => 'telefon_1',
],
]) ?>
Свойства виджета:
view
: (string) Вид который будет вызван для вывода данных.condition
: (string|array) Условие для выбора конкретного блока.viewPath
: (string) Путь к директории где лежат файлы вида. Рекомендуется использовать только для исключений, глобально для всех виджетов путь можно указать в params.php конфиге$params['blocks']['viewPath'] = '@frontend/views/widgets/blocks'
BlockView
Виджет для вывода группы блоков. Пример использования:
use branchup\blocks\widgets\BlockGroupView;
<?= BlockGroupView::widget([
'condition' => [
'group_id' => '2',
],
]) ?>
Свойства виджета:
view
: (string) Вид который будет вызван для вывода данных.condition
: (string|array) Условие для выбора конкретного блока.viewPath
: (string) Путь к директории где лежат файлы вида. Рекомендуется использовать только для исключений, глобально для всех виджетов путь можно указать в params.php конфиге$params['blocks']['group']['viewPath'] = '@frontend/views/widgets/blocks'
.
BlockGallery
Виджет для вывода поля типа GALLERY_TYPE
. Пример использования:
use branchup\blocks\widgets\BlockGalleryView;
<?= BlockGalleryView::widget([
'condition' => [
'alias' => 'images',
],
]) ?>
Свойства виджета:
view
: (string) Вид который будет вызван для вывода данных.condition
: (string|array) Условие для выбора конкретного блока.viewPath
: (string) Путь к директории где лежат файлы вида. Рекомендуется использовать только для исключений, глобально для всех виджетов путь можно указать в params.php конфиге$params['blocks']['group']['viewPath'] = '@frontend/views/widgets/blocks'
.