Add wespos_visible attribute for product using eav [intern last project]

Trong bài viết này chúng ta sẽ tìm hiểu về cách để thêm wespos_visible attribute cho product. Đây là thuộc tính để xác định xem product có được hiển thị trên POS hay không. Như chúng ta đã biết Magento 2 quản lý Product bởi EAV model, vì vậy ta có thể dễ dàng thêm một attribute cho product bằng cách thêm một column cho product table.

Bước 1: Create eavsetup factory

/**
     * @var \Magento\Eav\Setup\EavSetupFactory
     */
    private $eavSetupFactory;

    public function __construct(EavSetupFactory $eavSetupFactory)
    {
        $this->eavSetupFactory = $eavSetupFactory;
    }

Bước 2: Add EAV attribute

public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
        echo '----UPGRADE----';
        if (version_compare($context->getVersion(), '0.0.4') < 0
        ) {
            $eavSetup->removeAttribute(
                Product::ENTITY,
                'webpos_visible');

            $eavSetup->addAttribute(
                Product::ENTITY,
                'webpos_visible',
                [
                    'group' => 'General',
                    'type' => 'int',
                    'backend' => '',
                    'frontend' => '',
                    'label' => 'webpos visible',
                    'input' => 'boolean',
                    'class' => '',
                    'source' => Boolean::class,
                    'global' => ScopedAttributeInterface::SCOPE_GLOBAL,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => false,
                    'default' => '0',
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => false,
                    'used_in_product_listing' => false,
                    'unique' => false,
                    'apply_to' => '']
            );
        }

Như ta đã thấy thì method addAttribute method gồm 3 tham số :

  • type id của entity ta muốn addAttribute, trong trường hợp này là Product
  • tên của attribute ta muốn thêm, trong trường hợp này là “wespos_visible
  • một mảng gồm các cặp key value để định nghĩa attribute như là : input type, label, source, …

Một số định nghĩa ta cần lưu ý :

  • group: khai báo tên group trong backend
  • type: set kiểu dữ liệu, ở đây ta để boolean, true là hiển thị trên pos, false là không được hiển thị trên pos
  • global: khai báo scope của attribute (store, website, global)
  • apply _to: assign cho loại sản phẩm ta muốn set attribute

Sau khi hoàn thành các bước trên thì chạy lại câu lệnh php bin/magento setup:upgrade và tận hưởng thành quả :slight_smile:
130188493_201642848127731_3223958482639124015_n

Remove an eav attribute for product

Ta cũng có thể xóa một attribute khỏi product bằng cách sử dụng method removeAttribute thay vì method addAttribute.

public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
        $eavSetup->removeAttribute(
          \Magento\Catalog\Model\Product::ENTITY,
           'webpos_visible');
    }

Bài viết đến đây là kết thúc, hi vọng nó sẽ có ích với những bạn thực tập sinh tiếp theo của Magestore :))
Have fun coding ^-^

@Ashley_Ngo gút chóp em :))

1 Like