扩展文件:无法将字段添加到 Root.Main
Extending File: can't add field to Root.Main
我想为 SilverStripe 3.3.1 站点中的所有文件添加一个标签字段。我正在使用 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是:
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, and it provides a standard FieldList
as described in 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.
- 同上,使用
Root
和Main
为什么这不能按预期的方式工作?
问题是 Folder
是一种文件类型,但 Folder
在其 CMS FieldList
中没有 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);
}
}
}
我想为 SilverStripe 3.3.1 站点中的所有文件添加一个标签字段。我正在使用 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是:
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, and it provides a standard FieldList
as described in 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.
- 同上,使用
Root
和Main
为什么这不能按预期的方式工作?
问题是 Folder
是一种文件类型,但 Folder
在其 CMS FieldList
中没有 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);
}
}
}