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.
Шаг 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] . Мы сделаем все возможное, чтобы помочь вам!