Silverstripe 页面中的可变自定义字段;填充 Table
Variable Custom Fields in a Page in Silverstripe; Populate Table
如何在 Silverstripe 的页面中添加可变自定义字段?例如,如果我为 "Hobbies" 创建了一个自定义字段,一个人可能会有多种爱好。因此我需要用户动态添加另一个字段以在前端 CMS 中输入爱好。那么用户可以在 CMS 中单击 "Add another hobby" 这样的按钮吗?
另一个问题是如何以编程方式在 Silverstripe 中填充 table?
听起来您的页面需要 has_many
与 Hobby
数据对象扩展的关系:
// 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对你来说也是一个不错的选择。
如何在 Silverstripe 的页面中添加可变自定义字段?例如,如果我为 "Hobbies" 创建了一个自定义字段,一个人可能会有多种爱好。因此我需要用户动态添加另一个字段以在前端 CMS 中输入爱好。那么用户可以在 CMS 中单击 "Add another hobby" 这样的按钮吗?
另一个问题是如何以编程方式在 Silverstripe 中填充 table?
听起来您的页面需要 has_many
与 Hobby
数据对象扩展的关系:
// 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对你来说也是一个不错的选择。