Silverstripe 页面中的可变自定义字段;填充 Table

Variable Custom Fields in a Page in Silverstripe; Populate Table

如何在 Silverstripe 的页面中添加可变自定义字段?例如,如果我为 "Hobbies" 创建了一个自定义字段,一个人可能会有多种爱好。因此我需要用户动态添加另一个字段以在前端 CMS 中输入爱好。那么用户可以在 CMS 中单击 "Add another hobby" 这样的按钮吗?

另一个问题是如何以编程方式在 Silverstripe 中填充 table?

听起来您的页面需要 has_manyHobby 数据对象扩展的关系:

// HobbyPage.php
class HobbyPage extends Page {

    private static $has_many = array(
        'Hobbies' => 'HobbyPage'
    );

}

// Hobby.php
class Hobby extends DataObject {

    private static $has_one = array(
        'HobbyPage' => 'HobbyPage'
    );

    private static $db = array(
        'Title' => 'Varchar(250)',
        // Any extra fields you want
    );

}

根据您需要数据的复杂程度,您可以使用 GridField 或类似标签字段 (https://github.com/silverstripe-labs/silverstripe-tagfield) 处理在 CMS 中的添加。重要的是在担心如何存储/检索数据之前,让你的底层数据库结构正确(使用 as has_many)。

我相信 SilverStripe 课程 (http://www.silverstripe.org/learn/lessons) 涵盖了数据关系并且应该有所帮助。

听起来您可能正在寻找这个模块:

https://github.com/silverstripe-australia/silverstripe-multivaluefield

它允许您在单个字段中存储多个值,并为 UI 提供一些选项,包括您在问题中指出的多个下拉菜单。这是否可取取决于您的具体情况。非规范化有利有弊。

正如howard10所说,tagfield对你来说也是一个不错的选择。