Я создал пользовательский модуль для отображения пользовательской вкладки в форме продукта в бэк-энде. Я использовал это решение.
Теперь на вкладке я добавляю настраиваемые поля для сохранения в таблицу базы данных. сказать<input type="text" name="my_new_field" value="123">
Также создан специальный контроллер для сохранения продукта администратора, как показано ниже.
В etc / di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Catalog\Controller\Adminhtml\Product\Save" type="Namespace\Module\Controller\Adminhtml\Rewrite\Product\Save" />
</config>
И в Controller / Adminhtml / Переписать / Product / Save.php
<?php
namespace Namespace\Module\Controller\Adminhtml\Rewrite\Product;
class Save extends \Magento\Catalog\Controller\Adminhtml\Product\save
{
public function execute()
{
echo "hello"; print_r($_POST); die;
return parent::execute();
}
}
Теперь в execute
функции я ожидаю значение POST my_new_field
. Но я не понимаю. После этого я буду использовать пользовательские запросы для сохранения данных в пользовательской таблице.
Что я делаю неправильно или я должен использовать какой-то другой метод?
Обновление: 26 августа
Я использовал форму Ajax для сохранения данных на вкладке продукта, поскольку у меня были ограничения по времени. Я принял ответ @ william-oakley. Теперь, как @mageworx добавил в своем ответе, что это не стандартный способ сделать это.
Я хочу использовать стандартное использование пользовательского интерфейса в дальнейшем развитии. Поэтому мой вопрос заключается в том, как добавить пользовательскую вкладку в редактирование продукта, используя стандартную форму интерфейса пользователя, и сохранить пользовательские поля в пользовательской таблице или другим способом.
источник
Ответы:
Вы можете просто использовать «голое» поле ввода, вам просто нужно добавить следующий атрибут:
так:
После этого вы сможете получить данные POST для вашего ввода.
источник
Решение выше не является полностью правильным. Вы добавляете поле в виде «голого» html-элемента, а форма продукта является формой пользовательского интерфейса со своими особенностями. Специальный класс (
vendor/magento/module-ui/view/base/web/js/form/form.js
) отвечает за сбор полей и их проверку при отправке формы. Кроме того, этот класс должен пропускать поля, которые не связаны с этой формой пользовательского интерфейса или неadditional fields
похожи на все ваши поля. Вы должны использовать следующие имена, чтобы убедиться, что ваше поле будет отправлено на контроллер:input type="text" name="product[my_new_field]" value="123"
Но это не совсем правильно, потому что правильное решение не состоит в том, чтобы отклоняться от стандартов использования формы пользовательского интерфейса и использовать его собственные элементы и компоненты. В этом случае вам не нужно беспокоиться о такой вещи, потому что все будет обработано автоматически.
Вы можете проверить основной метод хранения данных форм пользовательского интерфейса, чтобы понять процесс:
Как видно из этого кода, HTML-форма со всеми ее полями не отправляется. Тем не менее,
this.source
иthis.additionalFields
отправляются, но ваш элемент не включен в него, потому что он объявлен неправильно.ОБНОВЛЕНИЕ ОТ 23.08.2016
Вот пример того, как добавить набор полей из нашего блога. Вы можете прочитать полную статью, используя ссылку ниже:
Источник: простой способ добавить набор полей с полями в UI-форму :
источник
Чтобы сохранить поле товара в пользовательской таблице, вы можете следовать логике цены уровня. Magento сохранит цену уровня с помощью пользовательской модели бэкэнда цены уровня. Мы можем следовать той же логике для нашего настраиваемого поля / атрибута. Для сохранения атрибута в пользовательской таблице необходимо создать пользовательский атрибут и предоставить ему базовую модель. Бэкэнд-модель будет проверять, сохранять и восстанавливать атрибуты. Вы можете выполнить следующие шаги.
Шаг 1. Создайте атрибут продукта
Шаг 2. Создайте внутреннюю модель для пользовательского атрибута продукта, который поможет при проверке и сохранит и восстановит значение атрибута.
Шаг 2. Модель ресурсов для сохранения и получения значения атрибута из пользовательской таблицы
источник