SilverStripe: добавление компонента в GridField с группировкой их в div (панель инструментов) - PullRequest
3 голосов
/ 30 января 2020

Я работаю над проектом SilverStripe. В моем проекте я добавляю компоненты в GridField динамически. На самом деле, я пытаюсь заменить существующие компоненты. Поскольку нет метода замены, я должен удалить существующие компоненты и добавить новые компоненты.

Ниже приведен мой код

 $grid = new GridField('ContentBlocks', 'Content Blocks', $this->owner->ContentBlocks(), $editor);
 $grid->getConfig()
      ->removeComponentsByType(GridFieldAddExistingAutocompleter::class)
      ->addComponent(new CustomGridFieldAddExistingAutocompleter())
      //configuring other components continue here

Как вы можете видеть в моем коде, я удаляю существующий компонент и добавление нового пользовательского компонента в качестве замены того, который был удален.

Добавлен пользовательский компонент. Но есть проблема с этим. Проблема заключается в том, что на внешнем интерфейсе новый компонент не добавляется точно в том месте, в котором он был удален.

См. Этот снимок экрана:

enter image description here

Как вы можете видеть на скриншоте, окно поиска (добавленный пользовательский компонент) вышло из контейнера или элемента div, в котором находится кнопка добавления блока содержимого. Если я не сделал эту замену, они оставайтесь в той же строке, что и на скриншоте ниже.

enter image description here

Я думаю, что я ищу способ сгруппировать их вместе в один ряд Как я могу это сделать? Возможно ли это?

1 Ответ

3 голосов
/ 31 января 2020

Вместо удаления и добавления компонентов существующего GridFieldConfig, мы можем создать свой собственный GridFieldConfig и добавить нужные нам компоненты.

$contentBlocksFieldConfig = GridFieldConfig::create();
$contentBlocksFieldConfig->addComponent(new GridFieldButtonRow('before'));
$contentBlocksFieldConfig->addComponent(new GridFieldAddNewButton('buttons-before-left'));
$contentBlocksFieldConfig->addComponent(new CustomGridFieldAddExistingAutocompleter('buttons-before-right'));
$contentBlocksFieldConfig->addComponent(new GridFieldToolbarHeader());
$contentBlocksFieldConfig->addComponent(new GridFieldSortableHeader());
$contentBlocksFieldConfig->addComponent(new GridFieldFilterHeader());
$contentBlocksFieldConfig->addComponent(new GridFieldDataColumns());
$contentBlocksFieldConfig->addComponent(new GridFieldEditButton());
$contentBlocksFieldConfig->addComponent(new GridFieldDeleteAction(true));
$contentBlocksFieldConfig->addComponent(new GridField_ActionMenu());
$contentBlocksFieldConfig->addComponent(new GridFieldPageCount('toolbar-header-right'));
$contentBlocksFieldConfig->addComponent(new GridFieldPaginator(25));
$contentBlocksFieldConfig->addComponent(new GridFieldDetailForm());

$contentBlocksField = GridField::create(
    'ContentBlocks', 
    'Content Blocks', 
    $this->ContentBlocks(), 
    $contentBlocksFieldConfig
);

Настройка вышеупомянутого компонента конфигурации основана на GridFieldConfig_RelationEditor. Вместо этого мы могли бы использовать компоненты GridFieldConfig_RecordEditor или любые другие конфигурации.

Кроме того, чтобы выровнять автозаполнение вправо, мы передаем 'buttons-before-right' в качестве параметра следующим образом:

->addComponent(new CustomGridFieldAddExistingAutocompleter('buttons-before-right'))

Предполагается, что CustomGridFieldAddExistingAutocompleter имеет тот же конструктор, что и GridFieldAddExistingAutocompleter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...