我想在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
标签之外,如下所示:
我试过了:
addFieldToTab('Root.Main', $field)
- 会产生[User Error] FieldList::addFieldToTab() Tried to add a tab to object 'FieldList' - 'Root' didn't exist.
Root
和Main
为什么这不按照预期的方式工作?
答案 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);
}
}
}