Magento 2: - Thêm thuộc tính chọn vào danh mục


9

Tôi muốn thêm thuộc tính select / dropdown vào danh mục và hiển thị nó trong phần phụ trợ để cho chủ cửa hàng chọn nó. Sau một số nghiên cứu tôi đã tìm ra những điều sau đây để làm:

  • Tạo một thuộc tính thông qua Setupscript
  • Bao gồm nó thông qua khai báo thành phần UI

Vì vậy, đây là những gì tôi đã làm:

public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
    /** @var $eavSetup \Magento\Eav\Setup\EavSetup */
    $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);

    $eavSetup->addAttribute(
        \Magento\Catalog\Model\Category::ENTITY,
        'attribute_code',
        [
            'type' => 'int',
            'label' => 'Top Navigation CMS Block',
            'input' => 'select',
            'source' => 'Magento\Catalog\Model\Category\Attribute\Source\Page',
            'required' => false,
            'sort_order' => 10,
            'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
            'group' => 'MyOwnGroup'
        ]
    );
}

xem / adminhtml / ui_component / category_form.xml:

<?xml version="1.0" encoding="UTF-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <fieldset name="content">
        <field name="attribute_code">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="sortOrder" xsi:type="number">61</item>
                    <item name="dataType" xsi:type="string">string</item>
                    <item name="formElement" xsi:type="string">select</item>
                    <item name="label" xsi:type="string" translate="true">Top Navigation CMS Block</item>
                </item>
            </argument>
        </field>
    </fieldset>
</form>

Nhưng điều đó là không đủ, việc sắp xếp các tab trong phần phụ trợ bị lẫn lộn. Ngoài ra, thả xuống được kết xuất, nhưng không có tùy chọn. Vì vậy, tôi phát hiện ra rằng bạn cũng phải chỉnh sửa Magento\Catalog\Model\Category\DataProvider::getFieldsMap(). Để làm được điều đó, chúng ta phải ghi đè lên nó thông qua 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">
    <preference for="Magento\Catalog\Model\Category\DataProvider" type="Vendor\Module\Model\Category\DataProvider" />
</config>

Trong nhà cung cấp dữ liệu riêng của mô-đun, bạn phải thêm thuộc tính trong hàm. Và sau đó nó hoạt động.

Vì vậy, đây là những câu hỏi của tôi:

  • Tôi không nghĩ rằng bạn thực sự phải ghi đè nhà cung cấp dữ liệu này để làm cho nó hoạt động, phải có cách tốt hơn
  • Có 3 vị trí bên trong mã mà bạn phải khai báo thuộc tính mới (tập lệnh thiết lập, thành phần ui, nhà cung cấp dữ liệu), tôi không thể tin rằng việc sử dụng nhiều chi phí này là cần thiết?
  • Tại sao bạn có thông tin dư thừa cho thuộc tính? Ví dụ, nhãn nằm trong tập lệnh thiết lập VÀ thành phần ui trong đó nhãn trong phần phụ trợ sẽ được đọc từ khai báo thành phần ui.

Tôi đã tạo thuộc tính thể loại của loại thả xuống, không có yêu cầu nào đối với DataProvider.
Dhiren Vasoya

Bạn có thể gửi giải pháp của bạn?
người kiểm tra

Tôi gửi câu trả lời, xin vui lòng kiểm tra.
Dhiren Vasoya

Câu trả lời:


3

Bạn cần thêm một "tùy chọn" nút vào cấu hình ui-thành phần

<field name="roflcopter">
    <argument name="data" xsi:type="array">
        <item name="options" xsi:type="object">Magento\Catalog\Model\Category\Attribute\Source\Page</item>
        <item name="config" xsi:type="array">
            <item name="sortOrder" xsi:type="number">70</item>
            <item name="dataType" xsi:type="string">string</item>
            <item name="formElement" xsi:type="string">select</item>
            <item name="label" xsi:type="string" translate="true">Roflcopter</item>
        </item>
    </argument>
</field>

lấy từ đây thả xuống thuộc tính tùy chỉnh Magento2.1


2

Tôi đã sử dụng đoạn mã sau để tạo thuộc tính trong InstallData.php .

Nhà cung cấp \ Tiện ích mở rộng \ Cài đặt \ InstallData.php

<?php
namespace Vendor\Extension\Setup;

use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class InstallData implements InstallDataInterface
{
    private $eavSetupFactory;

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

    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $setup->startSetup();
        $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);

        //Category Attribute Create Script
        $eavSetup->addAttribute(
            \Magento\Catalog\Model\Category::ENTITY,
            'attribute_id',
            [
                'group' => 'Mygroup',
                'label' => 'Attribute Label',
                'type'  => 'int',
                'input' => 'boolean',
                'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
                'source' => '',
                'required' => false,
                'sort_order' => 1,
                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                'used_in_product_listing' => true,
                'visible_on_front' => false
            ]
        );

        $setup->endSetup();
    }
}

Và sau đó tôi tạo một tệp category_form.xml

Nhà cung cấp \ Tiện ích mở rộng \ view \ adminhtml \ ui_component \ category_form.xml

<?xml version="1.0" encoding="UTF-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <fieldset name="attribute_id">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="label" xsi:type="string" translate="true">Attribute Label</item>
                <item name="collapsible" xsi:type="boolean">true</item>
                <item name="sortOrder" xsi:type="number">25</item>
            </item>
        </argument>
        <field name="attribute_id">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="sortOrder" xsi:type="number">20</item>
                    <item name="dataType" xsi:type="string">boolean</item>
                    <item name="formElement" xsi:type="string">checkbox</item>
                    <item name="source" xsi:type="string">category</item>
                    <item name="prefer" xsi:type="string">toggle</item>
                    <item name="valueMap" xsi:type="array">
                        <item name="true" xsi:type="string">1</item>
                        <item name="false" xsi:type="string">0</item>
                    </item>
                    <item name="validation" xsi:type="array">
                        <item name="required-entry" xsi:type="boolean">false</item>
                    </item>
                    <item name="default" xsi:type="string">0</item>
                    <item name="label" xsi:type="string" translate="true">Attribute Label</item>
                </item>
            </argument>
        </field>
</form>

Làm thế nào để bạn tạo một giá trị tùy chỉnh cho danh sách thả xuống của mình và nhận những giá trị này để lưu? Vui lòng xem: magento.stackexchange.com/questions/181756/ từ
heady12
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.