横向/银Stripe精美表单生成器

允许您通过 config.yml 定义 CMS 表单结构

1.0.3 2021-06-11 14:05 UTC

This package is auto-updated.

Last update: 2024-09-11 21:33:11 UTC


README

标准 CMS 表单生成器在自动创建用于编辑 SilverStripe 管理中记录的表单方面做得很好,但如果您想创建复杂的表单布局(向字段组添加字段、组合字段、自定义选项卡等),那么您将不得不花费大量时间编辑 getCMSFields

此模块允许通过 YML 配置在 SilverStripe CMS 中生成复杂的表单布局。您可以通过配置中的某些数组定义选项卡、字段类型、字段分组和关联。

安装

您可以通过 composer 安装

composer require i-lateral/silverstripe-fancy-form-scaffolder

用法

安装后,只需将 cms_fields 配置变量添加到您的 DataObject 中,FormScaffolder 将使用 FormScaffolder 为该对象构建所有 CMS 表单(通过 Form Scaffolding 加载)。

示例配置

class Product extends DataObject
{
    private static $db = [
        'Name' => 'Varchar',
        'StockID' => 'Varchar',
        'Description' => 'HTMLText',
        'Price' => 'Currency',
        'ItemsPerCarton' => 'Int'
    ];

    private static $has_one = [
        'Supplier' => Factory::class
    ];

    private static $many_many = [
        'Categories' => Category::class
    ];

    private static $cms_fields = [
        'Root.Main' => [
            'fields' => [
                'ProductDetails' => 'h2',
                'Title/StockID' => [
                    'type' => \SilverStripe\Forms\FieldGroup::class,
                    'fields' => [
                        'Title',
                        'StockID'
                    ]
                ],
                'Description',
                'Price/Cartons' => [
                    'type' => 'SilverStripe\Forms\CompositeField',
                    'fields' => [
                        'BasePrice',
                        'ItemsPerCarton',
                        'SupplierID'
                    ]
                ]
            ]
        ],
        'Root.Components' => [
            'fields' => [
                'Additions'
            ]
        ]
    ];
}

在构造时调用字段方法

您还可以在生成器构造/检索字段时调用字段方法。

这可以用于执行任务,例如更改字段标题或在 CompositeField 上定义列数。您可以使用以下示例来完成此操作

'Title/StockID' => [
    'type' => \SilverStripe\Forms\CompositeField::class,
    'fields' => [
        'Title',
        'StockID'
    ],
    'methods' => [
        'setTitle' => '',
        'setColumnCount' => 2
    ]
]