我有一个特定的模块,可以做一些事情来整理CMS。
我们称之为silverstripe-cleanup
。
该模块要做的一件事是将MetaData
字段移到它们自己的选项卡上,我想一直将其作为CMS中的最终选项卡。
因此,如果我的/httpdocs/silverstripe-cleanup/config/config.yml
如下所示,如何确保在所有其他扩展名之后都应用此扩展名?
---
Name: silverstripe-cleanup
---
SiteTree:
extensions:
- MetaDataMovementExtension
最佳答案
为了使模块成为最后一个加载模块,我们可以在模块After: "*"
文件中添加类似config.yml
的内容:
---
Name: silverstripe-cleanup
After: "*"
---
SiteTree:
extensions:
- MetaDataMovementExtension
这应确保在所有其他模块之后调用此模块。
将所有字段和选项卡添加到页面的CMS字段后,仍可能无法加载。这是因为在页面的
updateCMSFields
函数中调用getCMSFields
的原因。说这是我们的
updateCMSFields
函数:class MetaDataMovementExtension extends Extension {
function updateCMSFields($fields) {
if ($metadataFields = $fields->fieldByName('Root.Main.Metadata')) {
$fields->removeFieldFromTab('Root.Main', 'Metadata');
$fields->addFieldToTab('Root.Metadata', $metadataFields);
}
}
}
这是我们的课程之一:
class HomePage extends Page {
// ...
public function getCMSFields()
{
$fields = parent::getCMSFields();
$slidesField = GridField::create(
'Slides',
'Slide',
$this->Slides(),
GridFieldConfig_RecordEditor::create()
);
$fields->addFieldToTab('Root.Slides', $slidesField);
$fields->addFieldToTab('Root.Column', TextField::create('ColumnTitle', 'Title'));
return $fields;
}
}
updateCMSFields
挂钩在SiteTree::getCMSFields
中被调用。查看上面的getCMSFields
函数,在我们调用updateCMSFields
的位置,将在函数顶部调用parent::getCMSFields()
函数。之后,我们再添加额外的字段。这意味着我们的扩展名将在添加额外的字段之前被调用。这些额外的字段将放置在我们已移动的元数据标签之后。我们可以做的是用
getCMSFields
将其他字段包装在每个beforeUpdateCMSFields
中: public function getCMSFields()
{
$self =& $this;
$this->beforeUpdateCMSFields(function ($fields) use ($self) {
$slidesField = new GridField(
'Slides',
'Slide',
$self->Slides(),
GridFieldConfig_RecordEditor::create()
);
$fields->addFieldToTab('Root.Slides', $slidesField);
$fields->addFieldToTab('Root.Column', TextField::create('ColumnTitle', 'Title'));
});
return parent::getCMSFields();
}
这将确保在调用
updateCMSFields
之前添加我们的字段。使用
beforeUpdateCMSFields
时要注意的重要一点是,我们需要在$self
块中使用$this
而不是beforeUpdateCMSFields
。关于yaml - 最后如何应用SilverStripe扩展?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35679694/