爲了使模塊的最後一個加載,我們可以添加類似After: "*"
我們的模塊config.yml
文件:
---
Name: silverstripe-cleanup
After: "*"
---
SiteTree:
extensions:
- MetaDataMovementExtension
這將確保該模塊是所有其他人後調用。
將所有字段和製表符添加到頁面的CMS字段後,仍可能無法加載。這是因爲在頁面的getCMSFields
函數中調用updateCMSFields
的時間點。
說這是我們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
時需要注意的一個重要事項是我們需要在beforeUpdateCMSFields
塊內使用$self
而不是$this
。
我** **覺得你可以做 '--- 名稱:silverstripe-清理 後: 「*」 ---' – munomono