Magento 2: - বিভাগে নির্বাচন বৈশিষ্ট্য যুক্ত করুন


9

আমি কোনও বিভাগে একটি নির্বাচন / ড্রপডাউন গুণাবলী যুক্ত করতে এবং স্টোর মালিককে এটি নির্বাচন করতে দিতে ব্যাকএন্ডে প্রদর্শন করতে চাই। কিছু গবেষণা করার পরে আমি নিম্নলিখিতগুলি করলাম:

  • সেটআপস্ক্রিপ্টের মাধ্যমে একটি অ্যাট্রিবিউট তৈরি করুন
  • এটি ইউআই উপাদান ঘোষণার মাধ্যমে অন্তর্ভুক্ত করুন

সুতরাং আমি এই কাজটি করেছেন:

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 টি জায়গা রয়েছে যেখানে আপনাকে নতুন অ্যাট্রিবিউটটি ঘোষণা করতে হবে (সেটআপ স্ক্রিপ্ট, ইউআই উপাদান, ডেটা সরবরাহকারী), আমি বিশ্বাস করতে পারি না যে এই ওভারহেডটি প্রয়োজনীয়?
  • বৈশিষ্ট্যের জন্য আপনার কাছে অতিরিক্ত তথ্য কেন? উদাহরণস্বরূপ লেবেলটি সেটআপ স্ক্রিপ্টের মধ্যে রয়েছে এবং ইউআই উপাদান যেখানে ব্যাকএন্ডে লেবেলটি ইউআই উপাদান ঘোষণার মাধ্যমে পড়বে।

আমি ইতিমধ্যে ড্রপডাউন প্রকারের বিভাগের বৈশিষ্ট্য তৈরি করেছি, ডেটাপ্রোভাইডারের উপর কোনও প্রয়োজন নেই।
ধীরেন ভোসোয়া 16'17

আপনি কি আপনার সমাধান পোস্ট করতে পারেন?
পরীক্ষক

আমি উত্তর পোস্ট, দয়া করে চেক করুন।
ধীরেন ভસોয়া

উত্তর:


3

ইউআই-উপাদান কনফিগারেশনে আপনাকে নোড "বিকল্পগুলি" যুক্ত করতে হবে

<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

<?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();
    }
}

এবং তারপর আমি একটি ফাইল তৈরি 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
প্রশ্নগুলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.