proklung/wp-custom-page-editor-bundle

Бандл для редактирования кастомных таблиц в Wordpress

1.2.3 2021-04-30 15:59 UTC

This package is auto-updated.

Last update: 2024-11-29 06:10:21 UTC


README

Установка

composer require proklung/wp-custom-page-editor-bundle

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

Создание сущности

Сущность наследуется от DataManager.

Генераторы view

В описании полей (метод getMap) поле view_generator - кастомный генератор вывода этого поля в админке.

Текущие генераторы: postView (вывод поста), WpImageView (картинка из медиа-библиотеки).

Генератор реализует интерфейс ViewGeneratorInterface с методами:

  • viewList($param) - вид в списке
  • viewEditor($param, $payload = null) - вид на странице редактирования записи

К ним приложены классы Post и WpImage, реализующие интерфейс FieldProcessorInterface с методами:

  • public function beforeSaveDb($data) - перед сохранением в базу что-то сделать
  • public function afterLoadFromDb($data) - что-то сделать после загрузки из базы перед передачей во view.

События

getListenerEvents : список событий сущности. Что-то можно сделать с админкой перед выводом и так далее.

По умолчанию исполняется EditFormAfterLoadDefaultListener: первый столбец таблицы становится ссылкой на детальную страницу редактирования записи.

Список событий:

  • AfterLoadDatabaseEvent - после загрузки записи из базы
  • AfterSaveDatabaseEvent - после сохранения записи в базе
  • BeforeSaveDatabaseEvent - перед сохранением записи в базе
  • EditFormAfterLoadDatabaseEvent - перед генерацией столбцов редактора.
class ExampleEntity extends DataManager
{
    /**
     * @inheritDoc
     */
    public function getTableName() : string
    {
        return 'wp_example_custom_table';
    }

    /**
     * @inheritDoc
     */
    public function getEntityName(): string
    {
        return 'Example';
    }

    /**
     * @inheritDoc
     */
    public function getMap(): array
    {
        return [
            [
                'name' => 'new_column',
                'description' => 'Новый столбец',
                'type' => 'varchar',
                'length' => 50,
                'nulled' => false,
                'sortable' => true,
                'default' => '',
                'required' => false,
                'placeholder' => true
            ],
            [
                'name' => 'modified_date',
                'description' => 'Дата модификации',
                'type' => 'datetime',
                'sortable' => true,
                'default' => null,
                'view_type' => 'date',
                'required' => false,
            ],
            [
                'name' => 'description',
                'description' => 'Описание',
                'type' => 'longtext',
                'nulled' => false,
                'sortable' => true,
                'default' => '',
                'view_type' => 'textarea',
                'required' => false,
                'validators' => [
                    new Assert\Length([
                        'min' => 2,
                        'max' => 150,
                        'minMessage' => 'Description must be at least {{ limit }} characters long',
                        'maxMessage' => 'Description cannot be longer than {{ limit }} characters',
                    ])
                ]
            ],
            [
                'name' => 'picture',
                'description' => 'Картинка',
                'type' => 'int',
                'view_type' => 'text',
                'sortable' => true,
                'default' => 0,
                'required' => false,
                'view_generator' => PostView::class,
            ],
        ];
    }

    /**
     * @inheritDoc
     */
    public function getListenerEvents() : array
    {
        return [
            'admin.custom.table.edit_screen_after_load' => new EditFormAfterLoadListener
        ];
    }
}

Заведения сервиса

Сервис должен быть помечен тэгом wp_custom_table_editable.

  example_entity:
    class: Local\Services\Database\Entities\ExampleEntity
    tags:
      - { name: wp_custom_table_editable }

Все. В админке появится редактор этой таблицы.

Прочее

Создатель таблиц

Сервис table_admin_page_manager.creator_table.

  • setTable(string $table) - задать имя таблицы
  • createFromSchema(DataManagerInterface $schema) - создать таблицу из схемы (схема - сущность, см. выше)

Сервис table_admin_page_manager.creator_schema - создать схему из реальной таблицы.

  • setTable(string $table) - задать имя таблицы
  • existTable() - существует ли таблица?
  • getTableDescription() - получить схему таблицы
Генератор фикстур

Сервис table_admin_page_manager.fixture_generator.

  • fromSchema(DataManagerInterface $schema, int $count = 1) - создать столько-то записей по схеме сущности
Консольные команды
  • migrator:seed - Наполнить таблицу фикстурными данными

Параметры:

  • table - таблица
  • count - сколько записей генерировать. По умолчанию - 5
  • truncate - Чикать содержимое таблицы. По умолчанию - true