整理 UI,应用订单扩展
decluttering UI, order Extension gets applied
几年前我制作了一个 SilverStripe 网站,并在 Page.php 中添加了太多字段。我目前正在修改其中的一些内容,但无力重新发明该项目 - 现在在 SilverStripe 3.1.10 上。
我想为 Page Sub-类 整理 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 字段),但不适用于 [=14] 中添加的字段=](例如 Workflow 字段)。如果扩展在 UserDefinedForm
上,Workflow 也会被删除。但如果扩展名在 RedirectorPage
上,它就不起作用。另一方面,MenuTitle 在两个 类 中都被删除了。我猜这是关于秩序的。我的项目是 After: 'framework/','cms/'
,希望我可以在项目中进行类似 NoClutter
的扩展。
我怎样才能做到这一点,或者我还能如何解决这个问题?
您需要在 Page
getCMSFields()
函数的末尾添加 $this->extend('updateCMSFields', $fields)
。
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
通过在 getCMSFields()
的底部调用 $this->extend('updateCMSFields', $fields)
来解决这个问题。在调用 parent::getCMSFields()
之前需要 SiteTree::disableCMSFieldsExtensions()
才能使扩展挂钩工作。
几年前我制作了一个 SilverStripe 网站,并在 Page.php 中添加了太多字段。我目前正在修改其中的一些内容,但无力重新发明该项目 - 现在在 SilverStripe 3.1.10 上。
我想为 Page Sub-类 整理 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 字段),但不适用于 [=14] 中添加的字段=](例如 Workflow 字段)。如果扩展在 UserDefinedForm
上,Workflow 也会被删除。但如果扩展名在 RedirectorPage
上,它就不起作用。另一方面,MenuTitle 在两个 类 中都被删除了。我猜这是关于秩序的。我的项目是 After: 'framework/','cms/'
,希望我可以在项目中进行类似 NoClutter
的扩展。
我怎样才能做到这一点,或者我还能如何解决这个问题?
您需要在 Page
getCMSFields()
函数的末尾添加 $this->extend('updateCMSFields', $fields)
。
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
通过在 getCMSFields()
的底部调用 $this->extend('updateCMSFields', $fields)
来解决这个问题。在调用 parent::getCMSFields()
之前需要 SiteTree::disableCMSFieldsExtensions()
才能使扩展挂钩工作。