【问题标题】:silverstripe 3 changeFieldOrder API makes menu Tabs vanishsilverstripe 3 changeFieldOrder API 使菜单选项卡消失
【发布时间】:2015-01-02 00:43:56
【问题描述】:

下午好,

我正在尝试更改 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: changing the order of GridField input elements

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

感谢您的帮助。

【问题讨论】:

    标签: tabs field hidden silverstripe


    【解决方案1】:

    似乎如果您在包含 TabSetFieldList 上调用 $fields->changeFieldOrder($field_order),它将删除标签。

    当你有标签时,你的主要FieldList 包含一个TabSet,它包含多个Tab 对象。每个Tab 对象都包含自己的FieldList

    您可以做的是从您的Root.Main 选项卡中获取FieldList,然后在此FieldList 上调用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;
    }
    

    或者,您可以手动设置字段,让您完全控制字段和选项卡。

    【讨论】:

    • 非常感谢。很好的解决方案!
    猜你喜欢
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 2018-11-15
    相关资源
    最近更新 更多