gpt4 book ai didi

php - 扩展文件 : can't add field to Root. Main

转载 作者:可可西里 更新时间:2023-11-01 00:41:19 25 4
gpt4 key购买 nike

我想为 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 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 选项卡之外,看起来像这样:

Its outside the tab

我试过:

  • 使用 addFieldToTab('Root.Main', $field) - 它导致 [User Error] FieldList::addFieldToTab() Tried to add a tab to object 'FieldList' - “根”不存在。
  • 如上所述,使用 RootMain

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

最佳答案

问题是 Folder 是一种文件类型,但是 Folder 在其 CMS 中没有 Root.Main 选项卡字段列表.

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);
}
}
}

关于php - 扩展文件 : can't add field to Root. Main,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36122790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com