扩展文件:无法向Root.Main添加字段

Rob*_*ill 3 php silverstripe

我想在SilverStripe 3.3.1站点的所有文件中添加一个Tag字段.我正在使用Blog v2.4.0并将tagfield升级到v1.2.1.

FileExtension的配置是扩展File:

class FileExtension extends DataExtension
{
    private static $many_many = ['FileTags' => 'FileTag'];

    public function updateCMSFields(FieldList $fields)
    {
        $tagField = TagField::create('FileTags', 'Tags', FileTag::get(), $this->owner->FileTags())
            ->setShouldLazyLoad(true)
            ->setCanCreate(true);

        $fields->push($tagField);
    }
}
Run Code Online (Sandbox Code Playgroud)

FileTag堂课是:

class FileTag extends DataObject
{
    private static $db = ['Title' => 'Varchar(255)'];

    private static $belongs_many_many = ['Files' => 'File'];
}
Run Code Online (Sandbox Code Playgroud)

我附加扩展挂钩在这里,它提供了扩展文档中FieldList描述的标准.

问题!

该字段显示正确,但它在Root.Main选项卡之外,看起来像这样:

它在标签之外

我试过了:

  • 使用addFieldToTab('Root.Main', $field)- 它导致[User Error] FieldList::addFieldToTab() Tried to add a tab to object 'FieldList' - 'Root' didn't exist.
  • 如上所述,使用RootMain

为什么这不按预期方式工作?

3dg*_*goo 5

问题是Folder一种文件,但CMS Folder中没有Root.Main选项卡FieldList.

添加字段时File我们需要检查File类型是否Folder:

class FileExtension extends DataExtension {

    public function updateCMSFields(FieldList $fields) {
        if (!$this->owner instanceof Folder) {
            $tagField = TagField::create('FileTags', 'Tags', FileTag::get(), $this->owner->FileTags())
                ->setShouldLazyLoad(true)
                ->setCanCreate(true);

            $fields->addFieldToTab('Root.Main', $tagField);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)