TreeDropdownField Silverstripe 4 Метки навигации

Я работаю над проектом SilverStripe 4, где я использую поле TreeDropdown. В 3.6 он получил MenuTitle (Navigation Label) по умолчанию, но я заметил, что в SilverStripe отображаются заголовки страниц по умолчанию.

Поскольку мой клиент изменил заголовки страниц, TreeDropdownField показывает длинные заголовки страниц. Я хотел бы отображать ярлыки навигации вместо длинных заголовков, потому что структура этих длинных заголовков непонятна.

У меня есть следующий код:

<?php

use SilverStripe\ORM\DataObject;
use SilverStripe\CMS\Model\SiteTree;

use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\TextField;
use SilverStripe\Forms\TreeDropdownField;

class InternalLink extends DataObject {
    private static $db = [
        'Title'                 => 'Varchar',
    ];
    private static $has_one = [
        'LinkTarget'            => SiteTree::class,
        'InternalLinkCategory'  => 'InternalLinkCategory'
    ];

    public function getCMSFields() {
        $fields = parent::getCMSFields();

        $fields->addFieldToTab('Root.Main', TextField::create( 'Title', 'Titel link' ) );
        $fields->addFieldToTab('Root.Main', TreeDropdownField::create( 'LinkTargetID', 'Doeladres', SiteTree::class ) );

        return $fields;
    }
}

1 ответ

Решение

Ты можешь использовать TreeDropdownField::setTitleField(), Устанавливает поле, используемое для заголовка элемента.

$treeField = TreeDropdownField::create('LinkTargetID', 'Doeladres', SiteTree::class);
$treeField->setTitleField('MenuTitle');
$fields->addFieldToTab('Root.Main', $treeField);
Другие вопросы по тегам