1

DataExtension を介してタブを追加できるかどうか疑問に思っていましたか? updateCMSFields に渡された FieldList 引数は、DataExtensions の新しいフィールドを [詳細] タブに出力するように見えます。だから私の最初の試みは、そこに私のフィールドをプッシュすることでした:

public function updateCMSFields(FieldList $fields)  {  
    $secureFilesTab = $fields;
    $secureFilesTab->push(new HeaderField(_t('SecureFiles.GROUPACCESSTITLE', 'Group Access')));
    $secureFilesTab->push(new TreeMultiselectField('GroupPermissions', _t('SecureFiles.GROUPACCESSFIELD', 'Group Access Permissions')));
}    

これは正常に機能しますが、値を保存すると、CMS は Tree_View および List_View タブから Details タブにデータをロードします。以下のコメントで言及されているのは、これがフォルダーの DataExtension であるという事実です。

次に、FormScaffolder のコードを使用して新しいタブを追加しようとしました。

public function UpdateCMSFields(FieldList $fields) {
    $fields->push(new TabSet('Root', $secureFilesTab = new Tab('Security')));
$secureFilesTab->setTitle(_t('SiteTree.TABSECURITY', 'Security'));
}

これにより、すべてのタブ アイコンが Tree_View アイコンに変更され、新しい DataExtension フィールドがすべてのタブに配置されます。

DataExtension を介してタブを追加する適切な方法は何ですか?

4

2 に答える 2

3

DataObjects で getCMSFields() を使用する場合と同様に、addFieldsToTab() を使用して既存のタブまたは新しいタブに新しいフィールドを追加できます。

public function updateCMSFields(FieldList $fields)  {  
    if ($this->owner->ClassName != 'Folder' ){
        $fields->addFieldsToTab('Root.Security', array(
            new HeaderField(_t('SecureFiles.GROUPACCESSTITLE', 'Group Access')),
            new TreeMultiselectField('GroupPermissions', _t('SecureFiles.GROUPACCESSFIELD', 'Group Access Permissions'))
        ));     
    }
    if ($this->owner->ClassName == 'Folder' ){
        $fields->push(new HeaderField(_t('IMAFOLDER', 'I am a folder')));       
    }
}  

[セキュリティ] タブが見つからない場合は、'Root.Security' を最初の引数として渡すことによって作成されます。ドット表記は、タブセットとタブの入れ子構造を作成するために使用されます。同じ名前 (「ルート」) の新しいタブセットを単純にプッシュすることはできません。そのようなタブセットは既に存在するためです。タブをさらに操作する必要がある場合は、$fields->findOrMakeTab('TabSet.Tab') を使用してインスタンスにアクセスできます。つまり、$fields->findOrMakeTab('Root.Content');

于 2013-02-13T17:57:14.587 に答える