文章彙整

解決 Magento 2 新增 Product Attribute 自動新增至 Default AttributeSet 問題

By Sabina 3 months agoNo Comments
首頁  /  Magento  /  Magento-2  /  解決 Magento 2 新增 Product Attribute 自動新增至 Default AttributeSet 問題

當 Magento 使用上有時候需要多個 AttributeSet 來管理多種類的 Product,但是使用內建的 addAttribute 方法帶入 group 參數的時候,會自動新增至每一個 AttributeSet, 可是偏偏不是每一個 AttributeSet 都需要此屬性。我們今天就來看看到底是怎麼回事!

 

1. 新增 Attribute

通常會寫在 InstallData.php 內,今天我們就不特別說明新增的部分但是在新增的時候,我們首先要把 group 選項移除掉,並且加上 user_defined 選項,並給予 true 值。

      $eavSetup->addAttribute(
          \Magento\Catalog\Model\Product::ENTITY,
           'datetime_example',
           [
               'label' => 'datetime example'
               'group'=> 'example_group'    ---這項移除
               'user_defined'=> true,       ---這項要新增
               'type' => 'datetime',
               'input' => 'date',
               'backend' => Startdate::class,
               'required' => false,
               'global' => ScopedAttributeInterface::SCOPE_GLOBAL,
               'visible' => true,
               'searchable' => false,
               'filterable' => false,
               'filterable_in_search' => false,
               'visible_in_advanced_search' => false,
               'comparable' => false,
               'visible_on_front' => false,
               'used_in_product_listing' => false,
               'unique' => false
           ]
       );

 

2. 原始碼追蹤

大家一定會很好奇為什麼會這樣自動新增至 Default AttributeSet,原來是因為官方有段程式碼這樣寫:

> vendor/magento/module-eav/Setup/EavSetup.php:826

裡面有一個 foreach,會自動新增至所有的 AttributeSet,所以不要官方幫我們新增的話,記得要把 group 選項拿掉即可。

if (!empty($attr['group']) || empty($attr['user_defined'])) {
           $select = $this->setup->getConnection()->select()->from(
               $this->setup->getTable('eav_attribute_set')
           )->where(
               'entity_type_id = :entity_type_id'
           );
           $sets = $this->setup->getConnection()->fetchAll($select, ['entity_type_id' => $entityTypeId]);
           foreach ($sets as $set) {
               if (!empty($attr['group'])) {
                   $this->addAttributeGroup($entityTypeId, $set['attribute_set_id'], $attr['group']);
                   $this->addAttributeToSet(
                       $entityTypeId,
                       $set['attribute_set_id'],
                       $attr['group'],
                       $code,
                       $sortOrder
                   );
               } else {
                   $this->addAttributeToSet(
                       $entityTypeId,
                       $set['attribute_set_id'],
                       $this->_generalGroupName,
                       $code,
                       $sortOrder
                   );
               }
           }
       }

 

適用版本:

  • Magento 2.0 以上

 

簡單的程式編寫,就可以有不一樣的功能,我們歐斯瑞會不定期提供Magento簡易的相關教學文章,有興趣的也可以關注我們Facebook的粉絲專頁喔!

以上內容由Astralweb 歐斯瑞編寫製作

 000

推薦文章

Category:
  Magento-2

留下回應

你的電子郵件地址不會被公開.

取得獨家電子商務祕技

建立更好的策略靈感

跟上全球的網路趨勢

絕佳的電商解決方案

電子商務戰略全指南

每月發送電商戰略指南,只要填寫E-mail即可訂閱!

請到您的信箱確認,即可完成訂閱。