ドキュメントCommerceビデオとチュートリアル

製品属性の作成

最終更新日: 2025年5月5日
  • トピック:
  • 設定
  • バックエンド開発

作成対象:

  • 初心者
  • 中級
  • 管理者
  • ユーザー

製品属性の追加は、Commerce で最も一般的な操作の 1 つです。 属性は、製品に関連する多くの実用的なタスクを解決する強力な方法です。 製品に dropdown-type 属性を追加する簡単なプロセスがあります。

このビデオの内容は次のとおりです。

  • Cotton、Leather、Silk、Denim、Fur、Wool の値を持つ clothing_material というアトリビュートを追加します
  • 製品ビューページでこの属性を太字で表示します
  • デフォルト属性セットに割り当てて、制限を追加します
  • 新しい属性を追加

このビデオの目的は誰ですか。

  • Commerce を初めて使用する開発者で、プログラムによって製品属性を作成する方法を学ぶ必要があるもの

ビデオコンテンツ

video poster

https://video.tv.adobe.com/v/3412441?quality=12&learn=on&captions=jpn

コードサンプル

まず、必要なフォルダー、xml ファイル、PHP ファイルを作成します。

  • app/code/Learning/ClothingMaterial/registration.php
  • app/code/Learning/ClothingMaterial/etc/module.xml
  • app/code/Learning/ClothingMaterial/Model/Attribute/Backend/Material.php
  • app/code/Learning/ClothingMaterial/Model/Attribute/Frontend/Material.php
  • app/code/Learning/ClothingMaterial/Model/Attribute/Source/Material.php
  • app/code/Learning/ClothingMaterial/Setup/InstallData.php

app/code/Learning/ClothingMaterial/registration.php

<?php

use Magento\Framework\Component\ComponentRegistrar;

ComponentRegistrar::register(
    ComponentRegistrar::MODULE,
    'Learning_ClothingMaterial',
    __DIR__);

app/code/Learning/ClothingMaterial/etc/module.xml

NOTE
モジュールが宣言型スキーマを使用していて、ほとんどのモジュールが 2.3.0 以降である場合、setup_version を省略する必要があります。 ただし、従来のプロジェクトがある場合は、この方法が使用されることがあります。 詳しくは、developer.adobe.com を参照してください。
注意:この例のコードを動作させるには、setup_version を含める必要があります。含めない場合、InstallData.php は実行されません。
<?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="Learning_ClothingMaterial" setup_version="0.0.1"/>
</config>

app/code/Learning/ClothingMaterial/Model/Attribute/Backend/Material.php

NOTE
プロジェクトにある属性セット ID を使用してください。この例では、数値 9 です。
<?php
declare(strict_types=1);

namespace Learning\ClothingMaterial\Model\Attribute\Backend;

use Magento\Catalog\Model\Product;
use Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend;
use Magento\Framework\Exception\LocalizedException;

class Material extends AbstractBackend
{
    /**
     * @param Product @object
     * @throws LocalizedException
     */
    public function validate($object)
    {
        $value =$object->getData($this->getAttribute()->getAttributeCode());
        // Be sure to validate that your ID number it is likely to be different

        if (($object->getAttributeSetId() == 9) && ($value == 'fur')) {
            throw new LocalizedException(__('Bottoms cannot be fur'));
        }
    }
}

app/code/Learning/ClothingMaterial/Model/Attribute/Frontend/Material.php

<?php
declare(strict_types=1);

namespace Learning\ClothingMaterial\Model\Attribute\Frontend;

use Magento\Eav\Model\Entity\Attribute\Frontend\AbstractFrontend;
use Magento\Framework\DataObject;

class Material extends AbstractFrontend
{

    public function getValue(DataObject $object): string
    {
        $value = $object->getData($this->getAttribute()->getAttributeCode());
        return "<b>$value</b>";
    }

}

app/code/Learning/ClothingMaterial/Model/Attribute/Source/Material.php

<?php
declare(strict_types=1);

namespace Learning\ClothingMaterial\Model\Attribute\Source;

use Magento\Eav\Model\Entity\Attribute\Source\AbstractSource;

class Material extends AbstractSource
{
    /**
     * Get all options
     *
     * @retrun array
     */
    public function getAllOptions(): array
    {
       if(!$this->_options){
           $this->_options = [
               ['label'    => __('Cotton'),     'value' => 'cotton'],
               ['label'    => __('Leather'),    'value' => 'leather'],
               ['label'    => __('Silk'),       'value' => 'silk'],
               ['label'    => __('Fur'),        'value' => 'fur'],
               ['label'    => __('Wool'),       'value' => 'wool'],
           ];
       }
       return $this->_options;
    }
}

app/code/Learning/ClothingMaterial/Setup/InstallData.php

<?php
declare(strict_types=1);

namespace Learning\ClothingMaterial\Setup;

use Learning\ClothingMaterial\Model\Attribute\Frontend\Material as Frontend;
use Learning\ClothingMaterial\Model\Attribute\Source\Material as Source;
use Learning\ClothingMaterial\Model\Attribute\Backend\Material as Backend;
use Magento\Catalog\Model\Product;
use Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class InstallData implements InstallDataInterface
{
    protected $eavSetupFactory;

    public function __construct(
        \Magento\Eav\Setup\EavSetupFactory $eavSetupFactory
    )
    {
        $this->eavSetupFactory = $eavSetupFactory;
    }

    /**
     * @param ModuleDataSetupInterface $setup
     * @param ModuleContextInterface $context
     * {@inheritDoc}
     *
     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
     * @suppressWarnings(PHPMD.ExessiveMethodLength)
     * @SuppressWarnings(PHPMD.NPathComplexity)
     */
    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $eavSetup = $this->eavSetupFactory->create();
        $eavSetup->addAttribute(
            Product::ENTITY,
            'clothing_material',
            [
                'group'         => 'Product Details',
                'type'          => 'varchar',
                'label'         => 'Clothing Material',
                'input'         => 'select',
                'source'        => Source::class,
                'frontend'      => Frontend::class,
                'backend'       => Backend::class,
                'required'      => false,
                'sort_order'    => 50,
                'global'        => ScopedAttributeInterface::SCOPE_GLOBAL,
                'is_used_in_grid'               => false,
                'is_visible_in_grid'            => false,
                'is_filterable_in_grid'         => false,
                'visible'                       => true,
                'is_html_allowed_on_frontend'   => true,
                'visible_on_front'              => true,
            ]
        );
    }
}

役に立つリソース

カスタムテキストフィールド属性の追加

recommendation-more-help
3a5f7e19-f383-4af8-8983-d01154c1402f