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

Extending File: can't add field to Root.Main

我想为 SilverStripe 3.3.1 站点中的所有文件添加一个标签字段。我正在使用 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);
    }
}

FileTagclass是:

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

    private static $belongs_many_many = ['Files' => 'File'];
}

extension hook I'm attaching to is here, and it provides a standard FieldList as described in the extension documentation.

问题!

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

我试过:

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

问题是 Folder 是一种文件类型,但 Folder 在其 CMS FieldList 中没有 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);
        }
    }
}