Magento 2: 製品オプション テンプレートにカスタム フィールドを追加する

公開: 2021-02-04

Advanced Product Options 拡張機能を使用すると、製品ページのオプションだけでなく、さまざまなオプション テンプレートを作成して特定の製品に一括で割り当てることができます。

この記事では、Advanced Product Options (APO) のベスト プラクティスと標準に準拠したオプションおよびオプション テンプレートのカスタム フィールド Magento を追加するための段階的なガイドラインを提供します。

目次

  • 高度なカスタム フィールドとは何ですか?
  • ステップバイステップのガイドライン
    • 始める前に
    • ステップ1。 クラスの書き換え
    • ステップ # 2. 依存性注入の書き換え
    • ステップ#3。 新しいクラスの作成
    • ステップ#4。 バージョンアップ
    • ステップ#5。 フィナーレ
  • 要約

高度なカスタム フィールドとは何ですか?

Advanced Product Options 拡張機能は、さまざまな可能性を提供するために構築されました。 ただし、すべてのビジネスは異なるため、1 回限りの目標を補完するためにカスタマイズが必要になる場合があります。 これは特に、オプション テンプレートと追加された高度な製品フィールドをオファリングに一括割り当てする場合に当てはまります。

ステップバイステップのガイドライン

始める前に

  • カスタム オプション Magento に新しいフィールドを追加する方法に関する記事をお読みください。 こちらから入手できます。

Magento 2 カスタム フィールドを APO に追加した前述のブログ投稿の例を使用して変更します。

Magento 製品オプション

ステップ1。 クラスの書き換え

テンプレート用に作成されたテーブルには、必要なすべての属性がコア Magento テーブルとして保存されます。

Magento がカスタム フィールドを製品オプションまたはオプションまたはその値の属性に追加する場合、この高度なカスタム フィールドをすぐにテンプレートに追加する必要もあります。 テンプレートで使用するつもりがない場合を除きます。

この目的のために、メインの Option_Base モジュールにカスタム `app/code/MageWorx/OptionBase/Model/Installer.php` インストーラーを作成しました。

このインストーラーは、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。 バージョンアップ

`catalog_product_option` テーブルに `gtin` フィールドを持つ OptionGtin モジュールが既にインストールされているため、その 1 つのクラスを作成し、拡張機能のバージョンを上げる必要があります。

インストールをもう一度実行し、必要なテンプレート テーブルへの「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` テーブルです。

テンプレートに高度なカスタム フィールドを追加する

要約

Advanced Product Options のカスタマイズ可能性を高めることに特化した一連の記事がお役に立てば幸いです。

これで、カスタム フィールドをテンプレートに追加し、Magento 2 の製品オプション テンプレートを最大限に活用する方法がわかりました。

Advanced Product Options エクステンションで特定のカスタマイズの可能性が欠落している場合は、 [email protected]でリクエストを送信してください。 私たちはあなたを助けるために最善を尽くします!

magento 2 に依存するカスタム オプション

Mageworx でライブ デモを予約する