trainbrain/yii2-module-blocks

Blocks module for Yii2

Installs: 1

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Forks: 0

Type:yii2-extension

dev-main 2025-07-05 14:52 UTC

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'.