【问题标题】:Extending File: can't add field to Root.Main扩展文件:无法将字段添加到 Root.Main
【发布时间】:2016-03-21 03:43:10
【问题描述】:

我想为 SilverStripe 3.3.1 站点中的所有文件添加标签字段。我正在使用博客 v2.4.0 并将标签字段升级到 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,它提供标准的FieldList,如the extension documentation 中所述。

问题!

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

我试过了:

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

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

【问题讨论】:

  • 你能通过完整的代码来抛出“根不存在”错误吗?它应该在理论上有效......
  • 嘿@wmk - 它实际上是由用$fields->addFieldToTab('Root.Main', $field) 替换$fields->push($field) 引起的

标签: php silverstripe


【解决方案1】:

问题是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);
        }
    }
}

【讨论】:

  • 不错的编辑 ;) 只是遵循了同样的思路。感谢您的回答 - 效果很好。
猜你喜欢
  • 2014-01-07
  • 2018-09-03
  • 2012-11-21
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多