文章彙整

Magento 2 EAV Model 介紹 (2) – 使用程式新增 Attribute

By Steffi 1 week agoNo Comments
首頁  /  Magento  /  Magento-2  /  Magento 2 EAV Model 介紹 (2) – 使用程式新增 Attribute

上一個篇幅的文章內,我們介紹了 Eav Model 的關係。今天我們要透過程式的方式來教大家如何新增 AttributeAttribute Set,利用程式的方式新增,不僅可以確保在安裝模組的時候開發機、測試伺服器及正式伺服器內都擁有一樣的 Attribute,也可以更有效的管理 Attribute 唷!※Magento 版本:2.1 以上
一般來說,在安裝一個新的 Module 的時候, 會使用 upgrade 指令,若讀到這邊不知道指令操作的朋友,可以輸入 bin/magento 會有完整的指令列表,Upgrade 指令執行後,會去執行 InstallData 內的程式,而新增 Attribute 的部分就非常適合寫在這邊了。

1.Install Data

我們來新增一個空白的 InsatallData.php 在你所開設的模組內,路徑為:

{vendor}/{extension_name}/Setup/InstallData.php

程式碼如下:

<?php


namespace Vendor\ExtensionName\Setup;


use Magento\Framework\Setup\InstallDataInterface;

use Magento\Framework\Setup\ModuleContextInterface;

use Magento\Framework\Setup\ModuleDataSetupInterface;


class InstallData implements InstallDataInterface

{

   /**

    * Function install

    * @param ModuleDataSetupInterface $setup

    * @param ModuleContextInterface $context

    * @return void

    */

   public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)

   {

       //install data here

   }

}



2.EavSetup

新增檔案後,我們就已經完成了第一步驟了,接下來是使用 Factory 方法產生 eavSetup 的 class,eavSetup 內有各種的 Method,無論是 addAttribute、addAttributeSet 都可以由這個 class 來操作。將以下程式碼貼至 installfunction 內。

<?php

      /** @var EavSetup $eavSetup */

       $eavSetup = $this->eavSetupFactory

           ->create([

               'setup' => $setup

           ]);

3.新增 Attribute Set

我們使用剛剛透過 factory 方法產生出來的 eavSetup 來新增一個屬於 catalog_productAttribute set,並且將其命名為 features,使用 addAttributeSet 的方法,catelog_productnamespace \Magento\Catalog\Model\Product,所以可以直接用 static property 靜態變數取得 catelog_product 的字串,不需要自己手動輸入,減少輸入錯誤的風險,將以下程式碼貼至 install 的 function 內:

<?php


$eavSetup->addAttributeSet(

\Magento\Catalog\Model\Product::ENTITY,

'features',

'1'

);

4.新增 Product Attribute

我們這邊要使用的是 addAttribute 這個 Method。假如我們要新增一個 is_featured 欄位,一樣使用 eavSetup 來新增。

* 第一個參數:為 entity type,這邊使用 catalog_product 的 namespace 靜態變數代入

* 第二個參數:為 attribute code,這是一個唯一值,在同一個 entity type 內不能夠被重複使用

* 第三個參數:為 attribute 屬性的陣列 ( array ),這邊介紹一下幾個重要欄位:

 * group:所屬群組

 * type:資料型別,決定資料存在哪一個資料表的關鍵

 * label:在前端顯示的文字

 * input:在後台的欄位呈現方式

 * class:對應到的 class ,沒有可以不用寫

 * default:預設資料為何

 * searchable:是否可搜尋

 * comparable:是否可比較

 * filterable:是否可過濾

參考程式如下:

<?php

$eavSetup->addAttribute(

               \Magento\Catalog\Model\Product::ENTITY,

               'is_featured',

               [

                   'group' => 'General',

                   'type' => 'int',

                   'backend' => '',

                   'frontend' => '',

                   'label' => 'Is Featured',

                   'input' => 'boolean',

                   'class' => '',

                   'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',

                   'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,

                   'visible' => true,

                   'required' => false,

                   'user_defined' => false,

                   'default' => '1',

                   'searchable' => false,

                   'filterable' => false,

                   'comparable' => false,

                   'visible_on_front' => false,

                   'used_in_product_listing' => false,

                   'unique' => false,

                   'apply_to' => ''

               ]

           );

5.新增 Category Attribute

新增 Category Attribute 的方法跟 Product 的方法其實大同小異。唯一不同的是需要把 Entity type 置換掉。而 catalog_categorynamespace\Magento\Catalog\Model\Category,我們一樣可以使用靜態變數取得字串 ( String )。

參考程式如下:

<?php

$eavSetup->addAttribute(

               \Magento\Catalog\Model\Category::ENTITY,

               'is_featured',

               [

                   'group' => 'General',

                   'type' => 'int',

                   'backend' => '',

                   'frontend' => '',

                   'label' => 'Is Featured',

                   'input' => 'boolean',

                   'class' => '',

                   'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',

                   'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,

                   'visible' => true,

                   'required' => false,

                   'user_defined' => false,

                   'default' => '1',

                   'searchable' => false,

                   'filterable' => false,

                   'comparable' => false,

                   'visible_on_front' => false,

                   'used_in_product_listing' => false,

                   'unique' => false,

                   'apply_to' => ''

               ]

           );


6.注意事項

1.Attribute 或是 Attribute set 再新增的時候參數非常繁瑣,常常需要不斷的刪除 module 再 upgrade module 來驗證是否成功。
2.刪除 module 時,要記得至 eav_attribute 資料表內將剛剛新增的 attribute 刪除。
3.Catalog Product 及 Catalog Category 是 Magento 內最完整的 Eav model,若是需要參考,可以優先使用。

想看更多Magento 2 教學導覽,別忘了訂閱我們的電子報,以及追蹤我們的Facebook粉絲專頁唷!

延伸閱讀:
解決 Magento 2 新增 Product Attribute 自動新增至 Default AttributeSet 問題
Magento 2 EAV Model 介紹 (3) – 在 Magento 2 使用程式新增 entity type

更多Magento相關文章請看: Magento教學導覽

 

 

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

 000

推薦文章

Category:
  Magento-2

留下回應

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

取得獨家電子商務祕技

建立更好的策略靈感

跟上全球的網路趨勢

絕佳的電商解決方案

電子商務戰略全指南

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

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