#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. Звучит неплохо. Я попробую сделать это сегодня и сообщу вам. Спасибо за ответ.