Saya ingin menambahkan atribut pilih / dropdown ke kategori dan menampilkannya di backend untuk membiarkan pemilik toko memilihnya. Setelah beberapa penelitian saya menemukan hal berikut yang harus dilakukan:
- Buat atribut melalui Setupscript
- Sertakan melalui deklarasi komponen UI
Jadi inilah yang telah saya lakukan:
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'
]
);
}
lihat / 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>
Tapi itu tidak cukup, penyortiran tab di backend tercampur. Juga dropdown akan diberikan, tetapi tanpa opsi. Jadi saya tahu Anda juga harus mengedit Magento\Catalog\Model\Category\DataProvider::getFieldsMap()
. Untuk melakukan itu kita harus menimpanya melalui 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>
Di penyedia data modul Anda sendiri, Anda harus menambahkan atribut dalam fungsi. Dan kemudian berhasil.
Jadi inilah pertanyaanku:
- Saya tidak berpikir bahwa Anda benar-benar harus menimpa penyedia data ini untuk membuatnya berfungsi, pasti ada cara yang lebih baik
- Ada 3 tempat di dalam kode di mana Anda harus mendeklarasikan atribut baru (skrip pengaturan, komponen ui, penyedia data), saya tidak percaya bahwa biaya overhead sebanyak ini diperlukan?
- Mengapa Anda memiliki informasi yang berlebihan untuk atribut? Misalnya label ada di dalam skrip setup DAN komponen ui di mana sebagai label di backend akan dibaca dari deklarasi komponen ui.
magento2
category
attributes
setup-script
penguji
sumber
sumber
Jawaban:
Anda perlu menambahkan simpul "opsi" ke konfigurasi ui-komponen
diambil dari sini Magento2.1 Kategori dropdown atribut khusus
sumber
Saya menggunakan kode berikut untuk membuat atribut di InstallData.php .
Dan Lalu saya membuat file category_form.xml
sumber