SilverStripe-添加2个TreeDropdownFields,只有一个可用

SilverStripe-添加2个TreeDropdownFields,只有一个可用,silverstripe,Silverstripe,我在为DataObject创建2个TreeDropdownFields时遇到了一个非常奇怪的问题。由于某些原因,在SilverStripe管理中,只有2个TreeDropdownFields中的1个正确呈现。另一个根本不会呈现为TreeDropdownField,而只是作为标签: 代码如下: class HomeBanner extends DataObject { public static $db = array( 'SortOrder' => 'Int',

我在为
DataObject
创建2个
TreeDropdownFields
时遇到了一个非常奇怪的问题。由于某些原因,在SilverStripe管理中,只有2个
TreeDropdownFields
中的1个正确呈现。另一个根本不会呈现为
TreeDropdownField
,而只是作为标签:

代码如下:

class HomeBanner extends DataObject {

    public static $db = array(
        'SortOrder' => 'Int',
        'Title' => 'Varchar'
    );

    public static $has_one = array(
        'Image' => 'Image',
        'SecondaryImage' => 'Image',
        'FirstLink' => 'SiteTree',
        'SecondLink' => 'SiteTree'
    );

    public function getCMSFields() {
        $fields = parent::getCMSFields();
        $fields->removeFieldFromTab('Root.Main', 'PageID');
        $fields->removeFieldFromTab('Root.Main', 'SortOrder');

        $fields->addFieldToTab('Root.Main', new TreeDropdownField('FirstLinkID', 'First Link', 'SiteTree'));
        $fields->addFieldToTab('Root.Main', new TreeDropdownField('SecondLinkID', 'Second Link', 'SiteTree'));

        return $fields;
    }

    public static $summary_fields = array(
        'ID' => 'ID',
        'Title' => 'Title',
        'Thumbnail' => 'Thumbnail'
    );

    public function getThumbnail() {
        return $this->Image()->CMSThumbnail();
    }
}
以下是我迄今为止所尝试的:

  • 正在运行
    dev/build/?flush=true
  • 运行
    ?flush=all
    ?flush=1
  • dev/build
    +刷新后注销和重新登录
  • 在另一个浏览器中登录管理员(我通常使用Chrome,但是 在FireFox上登录到该站点的管理员,发现了相同的问题)
  • 错误日志没有报告任何内容--它们是清晰的
  • Chrome开发工具的控制台中没有错误
  • 添加第三个
    TreeDropdownField
    将允许渲染前两个 正确,但第三个将只显示一个标签,而不是一个标签
    TreeDropdownField
  • 这种格式可以工作,但不保存所选内容——它会在您离开页面时清除您的选择。此外,它会删除所有已保存在管理员中的内容,除非我将其删除。我无法进行更改,否则保存的项目将被删除。):

    $fields->addFieldToTab('Root.Main',new TreeDropdownField('SecondLink','SecondLink','SiteTree','ID')


有人知道为什么会发生这种情况吗?不能有多个
TreeDropdownFields

重新发布似乎没有意义,因为这就是答案:


“HomeBanner”这个名字对我来说意味着应该有一个指向主页或类似页面的has_-one?造成这种情况的原因可能是SilverStripe正在自动尝试设置其中一个has_one关系,以指向横幅所属的页面

使用以下代码时也可能发生类似的冲突:

class Page extends SiteTree {
    private static $has_many = [
        'Banners' => 'Banner'
    ];
}

class Banner extends DataObject {
    private static $has_one = [
        'Page' => 'Page',
        'LinkedPage' => 'Page'
    ];
}
由于SilverStripe不知道是否应该使用
PageID
LinkedPageID
自动填充
has多个
关系的那一侧(GridField将尝试自动分配正确的
has one
ID)


在这些情况下,您可以使用点符号来区分它们-您可以将其更改为
$has_many=['Banners'=>'Banner.Page']。有关更多信息,请参阅。

名字“HomeBanner”对我来说意味着还应该有一个指向主页或类似内容的图标?原因可能是SilverStripe正在自动尝试设置一个has_one关系,以指向横幅所属的页面。废话……这就是我所缺少的。我不敢相信我以前没有意识到!我想这是因为我已经离开SilverStripe好几个月了,忘记了一些事情。谢谢