Silverstripe 4 добавить сетевое поле на вкладке cms

#silverstripe #silverstripe-4

Вопрос:

Уважаемые пользователи Silverstripe 4, мне нужен кто-то, кто объяснит мне, как решить мою проблему. Я создаю модуль электронной коммерции, я создаю объект данных для вставки новых товаров и категорий без каких-либо проблем.

Проблема возникает, когда я пытаюсь создать сопутствующие продукты для нового продукта. Я делаю это из has_many relatian, ListboxField и это хорошая работа, но я не хочу делать это с поданным списком. Я хочу создать новую вкладку, как (Root.RelatedProducts) и там, чтобы иметь поле сетки, где я могу добавить существующий продукт.

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

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

Страница расширения класса продукта {

 private static $has_many = [
    'RelatedProducts' => Product::class
];

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

  $gridFieldConfig = GridFieldConfig_RecordEditor::create();


    $gridFieldConfig = GridFieldConfig::create()->addComponents(
        new GridFieldToolbarHeader(),
        new GridFieldAddNewButton('toolbar-header-right'),
        new GridFieldSortableHeader(),
        new GridFieldDataColumns(),
        new GridFieldPaginator(10),
        new GridFieldEditButton(),
        new GridFieldDeleteAction(),
        new GridFieldDetailForm()
    );
    $gridField = new GridField("RelatedProducts", "Related products", $products,  $gridFieldConfig);

}
 

}

Ответ №1:

Если вы хотите добавить существующие продукты в отношение, вы можете использовать другую конфигурацию поля сетки. У Silverstripe есть некоторые предопределенные конфигурации, и вы воспользовались Gridfield_RecordEditor .

При использовании Gridfield_RelationEditor вы также получаете компонент для поиска существующих записей. Из док-блока RelationEditor:

Аналогично {@link GridFieldConfig_RecordEditor}, но добавляет функции для работы со многими или многими-многими отношениями.

Позволяет искать существующие записи для добавления в связь, отделять перечисленные записи от связи (вместо удаления их из базы данных) и автоматически добавлять в нее вновь созданные записи.

Вы можете настроить его примерно так:

  GridFieldConfig_RelationEditor::create()
    ->getComponentByType('GridFieldAddExistingAutocompleter')
    ->setSearchFields('MyField');
 

Кстати: я бы использовал many_many отношение, так как продукт может быть связан с несколькими продуктами.

Комментарии:

1. Звучит неплохо. Я попробую сделать это сегодня и сообщу вам. Спасибо за ответ.