decluttering UI,订单扩展应用

时间:2015-03-17 13:35:39

标签: silverstripe

几年前,我创建了一个SilverStripe网站,并为Page.php添加了太多字段。我现在正在重做其中的一些但是不能重新启动项目 - 现在在SilverStripe 3.1.10上。

我想为页面子类整理UI,它不需要所有继承的字段,只需要一些扩展。

此扩展程序的外观示例

class NoClutter extends Extension {
    public function updateCMSFields(FieldList $fields) {
        $fields->removeFieldFromTab("Root.Main", "MenuTitle");
        $fields->removeFieldFromTab("Root.Main", "Workflow");
    }
}

config.yml

RedirectorPage:
  extensions:
    - NoClutter

这适用于SiteTree中添加的字段的所有类(例如 MenuTitle 字段),但不适用于Page中添加的字段(例如工作流程字段)。如果扩展程序位于UserDefinedForm,则工作流程也会被删除。但如果扩展名在RedirectorPage上,则无效。另一方面, MenuTitle 在两个类中都被删除。我的猜测是关于订单的。我的项目是After: 'framework/','cms/',希望我可以像项目中的NoClutter一样进行扩展。

我如何实现这一目标或如何解决问题?

1 个答案:

答案 0 :(得分:2)

您需要在$this->extend('updateCMSFields', $fields) Page功能的末尾添加getCMSFields()

class Page extends SiteTree {

    // ...

    public function getCMSFields() {
        // call updateCMSFields after adding your fields
        SiteTree::disableCMSFieldsExtensions();
        $fields = parent::getCMSFields();
        SiteTree::enableCMSFieldsExtensions();

        // ...

        $this->extend('updateCMSFields', $fields);

        return $fields;
    }

}

$this->extend('updateCMSFields', $fields)声明将调用您的代码updateCMSFields()函数的位置。

updateCMSFields() Page功能中添加自定义字段之前,您遇到的问题是getCMSFields()。因此,您尝试在添加 Workflow 字段之前将其删除。这是因为updateCMSFields扩展钩子在父SiteTree getCMSFields()函数中声明。

UserDefinedForm通过调用$this->extend('updateCMSFields', $fields)底部的getCMSFields()来解决此问题。在调用SiteTree::disableCMSFieldsExtensions()以使扩展挂钩工作之前,需要parent::getCMSFields()