proklung/wp-custom-page-editor-bundle

用于Wordpress编辑自定义表格的Bundle

1.2.3 2021-04-30 15:59 UTC

This package is auto-updated.

Last update: 2024-09-29 05:36:34 UTC


README

安装

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

使用

创建实体

实体继承自 DataManager.

视图生成器

在字段描述(方法 getMap)中,字段 view_generator - 在后台中输出此字段的自定义生成器。

当前生成器: postView(输出帖子),WpImageView(媒体库中的图片)。

生成器实现了 ViewGeneratorInterface 接口,具有以下方法

  • viewList($param) - 列表视图
  • viewEditor($param, $payload = null) - 编辑页面的视图

附带的类有 PostWpImage,它们实现了 FieldProcessorInterface 接口,具有以下方法

  • public function beforeSaveDb($data) - 在保存到数据库前做一些事情
  • public function afterLoadFromDb($data) - 在从数据库加载后,在传递到视图之前做一些事情

事件

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