我有一个名为ContentSection
的DataObject,它有2个has_one关系:到页面类型LandingPage
和另一个DataObject Person
。
class ContentSection extends DataObject {
protected static $has_one = array(
'Person' => 'Person',
'LandingPage' => 'LandingPage'
);
}
LandingPage和Person都定义了与ContentSection的has_many关系。
class LandingPage extends Page {
protected static $has_many = array(
'ContentSections' => 'ContentSection'
);
}
class Person extends DataObject {
protected static $has_many = array(
'ContentSections' => 'ContentSection'
);
}
ContentSections可通过LandingPage和具有GridFieldConfig_RelationEditor
的人进行编辑,例如:
function getCMSFields() {
$fields = parent::getCMSFields();
$config = GridFieldConfig_RelationEditor::create(10);
$fields->addFieldToTab('Root.Content', new GridField('ContentSections', 'Content Sections', $this->ContentSections(), $config));
return $fields;
}
我的问题是如何隐藏/删除CMS编辑器标签中不相关的has_one字段?编辑ContentSection时,Person和LandingPage关系下拉字段都会显示,无论是Person还是LandingPage。我只想显示相关的has_one关系字段。我尝试在has_many关系上使用点表示法:
class Person extends DataObject {
protected static $has_many = array(
'ContentSections' => 'ContentSection.Person'
);
}
我还尝试在removeFieldFromTab
类的getCMSFields
方法中使用ContentSection
方法,我在其中定义了ContentSection的其他CMS字段:
$fields->removeFieldFromTab('Root.Main', 'Person');
答案 0 :(得分:7)
而不是removeFieldFromTab
使用removeByName
功能。如果没有removeFieldFromTab
标签,'Root.Main'
将无效。
我们还删除了PersonID
,而不是Person
。 has_one
个变量的ID
附加在变量名的末尾。
function getCMSFields() {
$fields = parent::getCMSFields();
$fields->removeByName('PersonID');
$fields->removeByName('LandingPageID');
return $fields;
}
如果您想有选择地隐藏或显示这些字段,可以在if
函数中添加一些getCMSFields
语句。
function getCMSFields() {
$fields = parent::getCMSFields();
if (!$this->PersonID) {
$fields->removeByName('PersonID');
}
if (!$this->LandingPageID) {
$fields->removeByName('LandingPageID');
}
return $fields;
}