编程语言
首页 > 编程语言> > php – 扩展文件:无法向Root.Main添加字段

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

作者:互联网

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

我的FileExtension配置为扩展文件:

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,它提供了标准的FieldList,如the extension documentation所述.

问题!

该字段显示正确,但它在Root.Main选项卡之外,如下所示:

Its outside the tab

我试过了:

>使用addFieldToTab(‘Root.Main’,$field) – 导致[用户错误] FieldList :: addFieldToTab()尝试向对象’FieldList’添加选项卡 – ‘Root’不存在.
>如上所述,使用Root和Main

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

解决方法:

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

向File添加字段时,我们需要检查文件类型是否不是文件夹:

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);
        }
    }
}

标签:silverstripe,php
来源: https://codeday.me/bug/20190829/1759411.html