Tabs silverstripe 3 changeFieldOrder API使菜单选项卡消失
下午好 我正在尝试更改CMS显示的DataObject中字段的顺序。在深入研究API之后,我成功地更改了顺序。然而,我注意到我的标签不见了 见下面的代码:Tabs silverstripe 3 changeFieldOrder API使菜单选项卡消失,tabs,field,hidden,silverstripe,Tabs,Field,Hidden,Silverstripe,下午好 我正在尝试更改CMS显示的DataObject中字段的顺序。在深入研究API之后,我成功地更改了顺序。然而,我注意到我的标签不见了 见下面的代码: class MyDbObj extends DataObject{ public static $db = array( 'Title' => 'Varchar', 'Desc' => 'Text', 'Weight' => 'Int', 'Status'
class MyDbObj extends DataObject{
public static $db = array(
'Title' => 'Varchar',
'Desc' => 'Text',
'Weight' => 'Int',
'Status' => "Enum('Enable, Disable', 'Disable')",
'Help' => 'HTMLText',
);
private static $has_one = array(
'FileUpload' => 'File'
);
private static $has_many = array(
'Contacts' => 'Contact'
);
/**
* \brief Interesting part here!!!
*
* Note: This works great, but it removes my Tabs.
*
* Example: This object in the CMS has a default Tab 'Main'
* The has_many relationship creates another Tab 'Contacts'
*
* Problem: After calling changeFieldOrder, the Tabs are all gone!
* How to get them back? Thanks.
*/
public function getCMSFields(){
$fields = parent::getCMSFields();
//The next line basically puts FileUpload before the Help (WYISWYG)
$field_order = array('Title', 'Desc', 'Weight', 'Status', 'FileUpload', 'Help');
$fields->changeFieldOrder($field_order); //Call to API
return $fields;
}
}//class
注意:我甚至用链接中所示的方法实现了整个过程:
我仍然会遇到标签消失的问题
感谢您的帮助。如果您在包含
选项卡集的字段列表上调用$fields->changeFieldOrder($field\u order)
,它将删除选项卡
当您有选项卡时,您的主字段列表
包含一个选项卡集
,其中包含多个选项卡
对象。每个选项卡
对象都包含自己的字段列表
您可以从Root.Main
选项卡获取字段列表
,并在此字段列表上调用changeFieldOrder()
:
public function getCMSFields() {
$fields = parent::getCMSFields();
if ($fields->hasTabSet()) {
if ($mainTab = $fields->fieldByName('Root.Main')) {
$mainFields = $mainTab->Fields();
if ($mainFields->Count()) {
$field_order = array('Title', 'Desc', 'Weight', 'Status', 'FileUpload', 'Help');
$mainFields->changeFieldOrder($field_order);
}
}
}
else
{
$field_order = array('Title', 'Desc', 'Weight', 'Status', 'FileUpload', 'Help');
$fields->changeFieldOrder($field_order);
}
return $fields;
}
或者,您也可以手动设置字段,从而完全控制字段和选项卡。非常感谢。极好的解决方案!