【问题标题】:Save DataObject relation when fields are added via getCMSFields()?通过 getCMSFields() 添加字段时保存 DataObject 关系?
【发布时间】:2014-10-01 10:35:54
【问题描述】:

使用此代码,当 CMS 页面发布时,DataObject ID (InternalExternalLinkID) 不会保存到页面中,如何自动从数据对象添加脚手架并保存关系(无需手动执行 onAfterWrite(),如在http://www.silverstripe.org/data-model-questions/show/11044):

class Page extends SiteTree {

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

    function getCMSFields() {
        $fields = parent::getCMSFields();
        $fields->addFieldsToTab('Root.Main', singleton('InternalExternalLink')->getCMSFields());

我知道您可能需要先创建数据对象,获取 ID,然后保存到页面对象 - CMS 可以不做这个脚手架,创建(或更新)并像 ModelAdmin 那样自动保存这个相关的数据对象吗?

【问题讨论】:

  • 您是否尝试在页面编辑屏幕中显示并保存 internalExternalLink 的所有字段?
  • 是的,将相关数据对象中的字段保存到相关数据对象中

标签: orm silverstripe


【解决方案1】:

您应该为此使用 GridField 来处理保存到嵌套对象的操作。检查 has_one 关系编辑器的关系处理程序模块。如果您不想安装另一个依赖项,也可以在没有模块的情况下使其工作。只需创建一个新的 GridField 实例并将您的 has_one 记录作为 DataList 查询传递。

http://addons.silverstripe.org/add-ons/simonwelsh/gridfieldrelationhandler

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 2014-10-12
    • 1970-01-01
    相关资源
    最近更新 更多