SilverStripe - 添加 2 个 TreeDropdownFields,只有一个有效

SilverStripe - Adding 2 TreeDropdownFields, only one works

我 运行 在为 DataObject 创建 2 TreeDropdownFields 时遇到了一个非常奇怪的问题。出于某种原因,2 个 TreeDropdownFields 中只有 1 个在 SilverStripe 管理中正确呈现。另一个根本不呈现为 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();
    }
}

这是我目前尝试过的方法:

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

似乎没有意义

重新发布,因为这原来是答案:

The name “HomeBanner” suggests to me that there should also be a has_one pointing back to HomePage or similar? The cause of this is probably that SilverStripe is automatically trying to set one of the has_one relations to point back to the page that the banner belongs to.

使用如下代码时也会发生类似的冲突:

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_many 关系的那一侧(GridField 将尝试自动分配正确的 has_one ID).

在这些情况下,您可以使用圆点符号来区分它们 - 您可以将其更改为 $has_many = ['Banners' => 'Banner.Page'];。有关详细信息,请参阅 https://docs.silverstripe.org/en/3/developer_guides/model/relations/#has-many