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.