silverstripe 3 changeFieldOrder API 使菜单选项卡消失

问题描述 投票:0回答:1

下午好,

我正在尝试更改 CMS 显示的 DataObject 中字段的顺序。在研究了 API 后,我成功地更改了顺序。但是,我注意到我的标签消失了。

参见下面的代码:

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

注意:我什至使用此处链接中显示的方法实现了整个过程: SilverStripe:更改 GridField 输入元素的顺序

我仍然遇到同样的问题,标签消失了。

感谢您的协助。

tabs field hidden silverstripe
1个回答
3
投票

似乎如果您在包含

$fields->changeFieldOrder($field_order)
FieldList
上调用
TabSet
,它将删除选项卡。

当您有选项卡时,会发生的情况是您的主

FieldList
包含一个
TabSet
,其中包含多个
Tab
对象。每个
Tab
对象都包含自己的
FieldList

您可以做的是从您的

FieldList
选项卡中获取
Root.Main
并在此
changeFieldOrder()
上致电
FieldList

public function getCMSFields() {
    $fields = parent::getCMSFields();

    $mainFields = $fields;
    
    if ($fields->hasTabSet()) {
        if ($mainTab = $fields->fieldByName('Root.Main')) {
            $mainFields = $mainTab->Fields();
        }
    }

    $mainFields->changeFieldOrder([
        'Title',
        'Desc',
        'Weight',
        'Status',
        'FileUpload',
        'Help',
    ]);
    
    return $fields;
}

您也可以手动设置字段,从而完全控制字段和选项卡。

© www.soinside.com 2019 - 2024. All rights reserved.