我想在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);
}
}
Run Code Online (Sandbox Code Playgroud)
这FileTag堂课是:
class FileTag extends DataObject
{
private static $db = ['Title' => 'Varchar(255)'];
private static $belongs_many_many = ['Files' => 'File'];
}
Run Code Online (Sandbox Code Playgroud)
我附加的扩展挂钩在这里,它提供了扩展文档中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为什么这不按预期方式工作?
问题是Folder一种文件,但CMS Folder中没有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);
}
}
}
Run Code Online (Sandbox Code Playgroud)