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

时间:2016-03-21 03:43:10

标签: 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);
    }
}

FileTag类是:

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,它提供the extension documentation中描述的标准FieldList

问题!

该字段显示正确,但它位于Root.Main标签之外,如下所示:

Its outside the tab

我试过了:

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

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

1 个答案:

答案 0 :(得分:5)

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