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选项卡之外,如下所示:
我试过了:
>使用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