Magento 2: - श्रेणी के लिए चयन विशेषता जोड़ें


9

मैं एक श्रेणी में एक चयन / ड्रॉपडाउन विशेषता जोड़ना चाहता हूं और इसे बैकएंड में प्रदर्शित करना चाहता हूं ताकि स्टोर के मालिक इसे चुन सकें। कुछ शोध के बाद मुझे निम्नलिखित करने का पता चला:

  • सेटअपस्क्रिप्ट के माध्यम से एक विशेषता बनाएँ
  • 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 स्थान हैं जहां आपको नई विशेषता (सेटअप स्क्रिप्ट, यूआई घटक, डेटा प्रदाता) की घोषणा करनी होगी, मुझे विश्वास नहीं हो सकता है कि यह बहुत अधिक आवश्यक है?
  • आपके पास विशेषता के लिए अनावश्यक जानकारी क्यों है? उदाहरण के लिए लेबल सेटअप स्क्रिप्ट और यूआई घटक के अंदर है, जहां बैकएंड में लेबल यूआई घटक घोषणा से पढ़ा जाएगा।

मैं पहले से ही ड्रॉपडाउन प्रकार की श्रेणी की विशेषता बना रहा हूं, डेटाप्रोवाइडर पर कोई आवश्यकता नहीं है।
धीरेन वसोया

क्या आप अपना समाधान पोस्ट कर सकते हैं?
परीक्षक

मैं उत्तर पोस्ट करता हूं, कृपया जांच करें।
धीरेन वसोया १६'१oya को

जवाबों:


3

आपको ui- घटक कॉन्‍फ़िगरेशन में एक नोड "विकल्प" जोड़ने की आवश्यकता है

<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>

यहाँ से लिया गया Magento2.1 श्रेणी कस्टम विशेषता ड्रॉपडाउन


2

मैंने InstallData.php में विशेषता बनाने के लिए निम्न कोड का उपयोग किया है ।

विक्रेता \ एक्सटेंशन \ Setup \ 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();
    }
}

और फिर मैं एक file category_form.xml बनाता हूं

विक्रेता \ एक्सटेंशन \ दृश्य \ 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>

आप अपने ड्रॉपडाउन के लिए एक कस्टम मान कैसे बनाते हैं और इन्हें सहेजने के लिए प्राप्त करते हैं? कृपया देखें: magento.stackexchange.com/questions/181756/…
heady12
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.