मैं एक श्रेणी में एक चयन / ड्रॉपडाउन विशेषता जोड़ना चाहता हूं और इसे बैकएंड में प्रदर्शित करना चाहता हूं ताकि स्टोर के मालिक इसे चुन सकें। कुछ शोध के बाद मुझे निम्नलिखित करने का पता चला:
- सेटअपस्क्रिप्ट के माध्यम से एक विशेषता बनाएँ
- UI घटक घोषणा के माध्यम से इसे शामिल करें
इसलिए मैंने यही किया है:
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'
]
);
}
/ 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>
लेकिन यह पर्याप्त नहीं है, बैकएंड में टैब की छंटनी मिश्रित है। इसके अलावा ड्रॉपडाउन का प्रतिपादन किया जाता है, लेकिन विकल्प के बिना। तो मुझे पता चला कि आपको भी एडिट करना है Magento\Catalog\Model\Category\DataProvider::getFieldsMap()
। ऐसा करने के लिए हमें इसे 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>
मॉड्यूल के अपने डेटा प्रदाता में आपको फ़ंक्शन में विशेषता को जोड़ना होगा। और फिर यह काम करता है।
तो यहाँ मेरे सवाल हैं:
- मुझे नहीं लगता है कि आपको वास्तव में इस डेटा प्रदाता को इसे काम करने के लिए अधिलेखित करना होगा, एक बेहतर तरीका होना चाहिए
- कोड के अंदर 3 स्थान हैं जहां आपको नई विशेषता (सेटअप स्क्रिप्ट, यूआई घटक, डेटा प्रदाता) की घोषणा करनी होगी, मुझे विश्वास नहीं हो सकता है कि यह बहुत अधिक आवश्यक है?
- आपके पास विशेषता के लिए अनावश्यक जानकारी क्यों है? उदाहरण के लिए लेबल सेटअप स्क्रिप्ट और यूआई घटक के अंदर है, जहां बैकएंड में लेबल यूआई घटक घोषणा से पढ़ा जाएगा।