mountainclans/livewire-section-builder

This is my package livewire-section-builder

1.0.5 2025-09-18 14:01 UTC

This package is auto-updated.

Last update: 2025-09-18 14:01:39 UTC


README

Установка

Установите пакет при помощи composer:

composer require mountainclans/livewire-section-builder

Важно! Пакет зависит от других компонентов, в частности, необходимо сразу после установки этого пакета также сконфигурировать для использования пакет mountainclans/livewire-select (инструкции находятся на его странице).

Опубликуйте и примените миграции:

php artisan vendor:publish --tag="livewire-section-builder-migrations"
php artisan migrate

Опубликуйте конфигурационный файл:

php artisan vendor:publish --tag="livewire-section-builder-config"

Конфигурационный массив имеет следующую вложенность:

retyrn [
    'sections' => [
        [
            'key' => 'top_banner',
            'title' => 'Top banner',
            'model' => EloquentSectionModelClass::class,
            'editor' => LivewireEditorComponent::class,
            'frontend' => LivewireViewComponent::class,
        ],
        [
            'key' => 'advantages',
            'title' => 'Advantages',
            'model' => EloquentSectionModelClass2::class,
            'editor' => LivewireEditorComponent2::class,
            'frontend' => LivewireViewComponent2::class,
        ],
    ],
    'templates' => [
        'main_page' => [
            'top_banner',
            'advantages',
        ],
    ],
]

Добавьте в tailwind.config.js в секцию content:

'./vendor/mountainclans/livewire-section-builder/resources/views/**/*.blade.php'

Опционально, Вы можете опубликовать views для их переопределения:

php artisan vendor:publish --tag="livewire-section-builder-views"

Использование

Перед использованием компонентов пакета, пожалуйста, сконфигурируйте используемые классы в конфигурационном файле.

Модель секции

Модель секции должна расширять класс

Структура хранения модели состоит из следующих полей:

  • id
  • template
  • page_id
  • type
  • order_column
  • fields
  • created_at
  • updated_at

Не рекомендуется менять миграцию, создающую таблицу для секций. Все необходимые поля секции можно сохранить в атрибуте модели fields. Данный атрибут представляет собой schemaless attribute, реализация от Spatie.

Тем не менее, Вы вправе расширять модель секции как Вам необходимо, к примеру, использовать трейты HasTranslations, InteractsWithMedia и другие.

Для того, чтобы одна и та же секция могла быть доступна для разных шаблонов, пожалуйста, используйте уникальные ключи в качестве названий секций.

Админка

В нужном месте страницы используйте компонент редактора:

@if ($pageId && !empty($destination))
    <livewire:admin-section-builder :template="BuilderPage::DESTINATION_HOME_PAGE" 
                                    :page-id="$pageId"
    />
@endif

Компоненты editor сами занимаются валидацией и сохранением своего состояния, в них может быть любая логика. Удалением, сортировкой, скрытием и показом контента этих компонентов занимается компонент admin-section-builder.

Настоятельно рекомендуется, чтобы компонент взаимодействовал только с соответствующей моделью, указанной в конфиге как model.

Рекомендуется создавать как минимум один публичный метод - saveSection, но в целом реализация никак не регламентирована.

При сохранении компонента рекомендуется выбрасывать событие:

$this->dispatch(AdminSectionBuilder::EVENT_SECTION_UPDATED);

События при редактировании в админке

Вы можете расширить класс компонента AdminSectionBuilder и использовать собственный компонент в админке. В частности, Вы можете подписаться на одно из следующих событий:

  • AdminSectionBuilder::EVENT_SECTION_ADDED
  • AdminSectionBuilder::EVENT_SECTION_UPDATED
  • AdminSectionBuilder::EVENT_SECTION_SORTED
  • AdminSectionBuilder::EVENT_SECTION_HIDDEN
  • AdminSectionBuilder::EVENT_SECTION_SHOWED
  • AdminSectionBuilder::EVENT_SECTION_DELETED

И реализовать, к примеру, отправку уведомлений пользователю.

View-компонент

<livewire:frontend-section-viewer :page-id="$page->id"
                                  :template="BuilderPage::DESTINATION_HOME_PAGE"
/>

Данный компонент выведет все секции с нужным контентом и в нужном порядке.

Авторы

Лицензия

The MIT License (MIT). Please see License File for more information.