Magento 2: добавление настраиваемого поля в шаблоны параметров продукта

Опубликовано: 2021-02-04

Расширение Advanced Product Options позволяет вам работать не только с опциями на страницах продуктов, но и создавать различные шаблоны опций и массово назначать их конкретным продуктам.

В этой статье представлены пошаговые инструкции по добавлению настраиваемых полей Magento для параметров и шаблонов параметров в соответствии с рекомендациями и стандартами Advanced Product Options (APO).

Оглавление

  • Что такое расширенные настраиваемые поля?
  • Пошаговые инструкции
    • Прежде чем мы начнем
    • Шаг 1. Переписать класс
    • Шаг № 2. Переписать внедрение зависимостей
    • Шаг 3. Создание нового класса
    • Шаг №4. Увеличение версии
    • Шаг № 5. Финал
  • Резюме

Что такое расширенные настраиваемые поля?

Расширение Advanced Product Options было создано, чтобы предлагать универсальные возможности. Однако, поскольку каждый бизнес отличается и отличается, может потребоваться индивидуальная настройка для достижения разовых целей. Это особенно актуально при массовом назначении шаблонов опций и добавлении расширенных полей продукта к вашим предложениям.

Пошаговые инструкции

Прежде чем мы начнем

  • Прочтите статью о том, как добавить новое поле в пользовательскую опцию Magento. Это доступно здесь.

Мы будем использовать и модифицировать пример из упомянутого сообщения в блоге, где мы добавили настраиваемое поле Magento 2 в APO.

Варианты продукта Magento

Шаг 1. Переписать класс

Таблицы, созданные для шаблонов, хранят все необходимые атрибуты как основные таблицы Magento.

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

Для этой цели мы создали специальный установщик app/code/MageWorx/OptionBase/Model/Installer.php в нашем основном модуле Option_Base.

Этот установщик помогает вам в Magento более удобно добавлять поля для параметров, значений параметров и шаблонов.

В отличие от предыдущего примера, где мы создали схему обязательного поля в app/code/VendorName/OptionGtin/Setup/InstallSchema.php , нам нужно будет переписать этот класс и добавить подключение к нашему пользовательскому установщику:

 <?php namespace VendorName\OptionGtin\Setup; use Magento\Framework\Setup\InstallSchemaInterface; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\SchemaSetupInterface; /** * @codeCoverageIgnore */ class InstallSchema implements InstallSchemaInterface { /** * @var \MageWorx\OptionBase\Model\Installer */ protected $optionBaseInstaller; /** * @param \MageWorx\OptionBase\Model\Installer $optionBaseInstaller */ public function __construct( \MageWorx\OptionBase\Model\Installer $optionBaseInstaller ) { $this->optionBaseInstaller = $optionBaseInstaller; } /** * {@inheritdoc} * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function install(SchemaSetupInterface $setup, ModuleContextInterface $context) { $installer = $setup; $installer->startSetup(); $this->optionBaseInstaller->install(); $installer->endSetup(); } }

Шаг № 2. Переписать внедрение зависимостей

Затем давайте перепишем `внедрение зависимостей` и изменим `app/code/VendorName/OptionGtin/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"> <!-- Data --> <type name="MageWorx\OptionBase\Model\Product\Option\Attributes"> <arguments> <argument name="data" xsi:type="array"> <item name="gtin" xsi:type="object">VendorName\OptionGtin\Model\Attribute\Option\Gtin</item> </argument> </arguments> </type> <!-- Installation --> <type name="MageWorx\OptionBase\Model\Installer"> <arguments> <argument name="installSchema" xsi:type="array"> <item name="option_gtin_install_schema_data" xsi:type="object">VendorName\OptionGtin\Model\InstallSchema</item> </argument> </arguments> </type> </config>

Шаг 3. Создание нового класса

Пришло время создать класс, содержащий схемы обязательных полей, которые раньше находились в `app/code/VendorName/OptionGtin/Setup/InstallSchema.php`.

Создайте класс app/code/VendorName/OptionGtin/Model/InstallSchema.php со следующим кодом:

 <?php namespace VendorName\OptionGtin\Model; use Magento\Framework\DB\Ddl\Table; class InstallSchema implements \MageWorx\OptionBase\Api\InstallSchemaInterface { /** * Get module table prefix * * @return string */ public function getModuleTablePrefix() { return ''; } /** * Retrieve module fields data array * * @return array */ public function getData() { $dataArray = [ [ 'table_name' => 'catalog_product_option', 'field_name' => 'gtin', 'params' => [ 'type' => Table::TYPE_INTEGER, 'unsigned' => true, 'nullable' => false, 'comment' => 'Option gtin', ] ], ]; return $dataArray; } /** * Retrieve module indexes data array * * @return array */ public function getIndexes() { return []; } /** * Retrieve module foreign keys data array * * @return array */ public function getForeignKeys() { return []; } }

Шаг №4. Увеличение версии

Поскольку у нас уже есть установленный модуль OptionGtin с полем `gtin` в таблице `catalog_product_option`, необходимо создать его один класс и увеличить версию расширения.

Нам нужно увеличение версии, чтобы запустить установку еще раз и завершить установку поля `gtin` в таблицу необходимых шаблонов.

`app/code/VendorName/OptionGtin/Setup/UpgradeSchema.php`

 <?php namespace VendorName\OptionGtin\Setup; use Magento\Framework\Setup\UpgradeSchemaInterface; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\SchemaSetupInterface; use MageWorx\OptionFeatures\Model\OptionDescription; use MageWorx\OptionFeatures\Model\OptionTypeDescription; use MageWorx\OptionFeatures\Model\Image; use MageWorx\OptionFeatures\Model\OptionTypeIsDefault; class UpgradeSchema implements UpgradeSchemaInterface { /** * @var \MageWorx\OptionBase\Model\Installer */ protected $optionBaseInstaller; /** * @var SchemaSetupInterface */ protected $setup; /** * UpgradeSchema constructor. * * @param \MageWorx\OptionBase\Model\Installer $optionBaseInstaller */ public function __construct( \MageWorx\OptionBase\Model\Installer $optionBaseInstaller ) { $this->optionBaseInstaller = $optionBaseInstaller; } /** * {@inheritdoc} */ public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context) { $this->setup = $setup; $this->optionBaseInstaller->install(); } }

Теперь увеличьте версию модуля:

`app/code/VendorName/OptionGtin/etc/module.xml`

 <?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="VendorName_OptionGtin" setup_version="1.0.1"> <sequence> <module name="Magento_Catalog"/> <module name="MageWorx_OptionBase"/> <module name="MageWorx_OptionFeatures"/> </sequence> </module> </config>

Шаг № 5. Финал

Вся тяжелая работа окончена. Осталось только запустить команду установки bin/magento setup:upgrade и проверить, что наше поле прописано в соответствующей таблице шаблонов.

В нашем случае это таблица `mageworx_optiontemplates_group_option`.

добавить предварительное пользовательское поле в шаблон

Резюме

Мы надеемся, что наша серия статей, посвященных расширению возможностей настройки расширенных параметров продукта, окажется вам полезной.

Теперь вы знаете, как добавить настраиваемое поле в шаблон и наилучшим образом использовать шаблоны параметров продукта в Magento 2.

Если вам не хватает определенных возможностей настройки в расширении «Дополнительные параметры продукта», отправьте запрос по адресу [email protected] . Мы сделаем все возможное, чтобы помочь вам!

magento 2 зависимые пользовательские параметры

Забронируйте живую демонстрацию с Meworx