একটি বহুবিচ্ছিন্ন ui- উপাদান জন্য ডিফল্ট মান সেট করুন


13

আমার ম্যাজেন্টো 2 ইনস্টলে একটি কাস্টম সত্তা রয়েছে।
এবং এই সত্তার ক্ষেত্রগুলির মধ্যে একটি হ'ল মাল্টিসিলেট টাইপ এবং এতে সমস্ত দেশের তালিকা রয়েছে।
আমি আমার প্রশাসক ফর্মের জন্য ইউআই-উপাদানগুলি ব্যবহার করছি।
যেহেতু নির্বাচনটিতে প্রায় 200 টি রেকর্ড রয়েছে, তাই আমি একটি বহুবিধ ক্ষেত্র রাখতে চাই না কারণ এটি ব্যবহার করা এত সহজ নয় that
সুতরাং আমি অ্যাড / এডিট পণ্য অ্যাডমিন বিভাগে বিভাগ ক্ষেত্রের অনুরূপ f অভিনব বহুজাতিকগুলির মধ্যে একটি তৈরি করেছি।
এটি দেখতে সুন্দর লাগছে তবে আমি এটিতে কোনও ডিফল্ট মান সেট করতে পারি না।
এখানে আমার কনফিগারেশন (কনফিগার defaultআইটেমটি লক্ষ্য করুন):

<field name="affected_countries" formElement="select" component="Magento_Ui/js/form/element/ui-select" sortOrder="100">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="source" xsi:type="string">article</item>
            <item name="filterOptions" xsi:type="boolean">true</item>
            <item name="chipsEnabled" xsi:type="boolean">true</item>
            <item name="disableLabel" xsi:type="boolean">true</item>
            <item name="default" xsi:type="string">RO,MD</item>
        </item>
    </argument>
    <settings>
        <elementTmpl>ui/grid/filters/elements/ui-select</elementTmpl>
        <dataType>text</dataType>
        <label translate="true">Affected Countries</label>
        <dataScope>affected_countries</dataScope>
        <componentType>field</componentType>
    </settings>
    <formElements>
        <select>
            <settings>
                <options class="Magento\Config\Model\Config\Source\Locale\Country"/>
            </settings>
        </select>
    </formElements>
</field>

এটি এর ফলাফল:

এবং আমি ডিফল্ট ক্ষেত্রে আমি যে দুটি মান রেখেছি তা নির্বাচিত হওয়ার প্রত্যাশা করছি:

যদি আমি উপাদানটিকে একটি সাধারণ বহুবিষ্টে পরিণত করি তবে এটি দুর্দান্তভাবে কাজ করে।

<field name="affected_countries" formElement="multiselect" sortOrder="100">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="source" xsi:type="string">article</item>
            <item name="default" xsi:type="string">RO,MD</item>
        </item>
    </argument>
    <settings>
        <dataType>text</dataType>
        <label translate="true">Affected Countries</label>
        <dataScope>affected_countries</dataScope>
    </settings>
    <formElements>
        <multiselect>
            <settings>
                <options class="Magento\Config\Model\Config\Source\Locale\Country"/>
            </settings>
        </multiselect>
    </formElements>
</field>

আমি এই ফর্ম্যাটটি defaultসেটিংয়ের জন্য বেঁধেছি

<item name="default" xsi:type="string">RO,MD</item>

এবং এটি একটি:

<item name="default" xsi:type="array">
    <item name="MD" xsi:type="string">MD</item>
    <item name="RO" xsi:type="string">RO</item>
</item>

এছাড়াও ট্যাগ দিয়ে চেষ্টা selectএবং multiselectভিতরে formElementsট্যাগ।
আমার সমস্ত চেষ্টা ব্যর্থতায় শেষ হয়েছিল।

এখানে নির্দেশ অনুসারেdefault অন্য যে কোনও ক্ষেত্রে ক্ষেত্রে সেটিংটি ব্যবহার করে (পাঠ্য, নির্বাচন, তারিখ, ...) দুর্দান্তভাবে কাজ করে।

অভিনব নির্বাচনের জন্য কোনও পরামর্শ? কিছু মিস করলাম?

দ্রষ্টব্য: আমি জানি যে আমি ডেটা সরবরাহকারীর মধ্যে একটি ডিফল্ট মান সরবরাহ করতে পারি যা ফর্মটি জনপ্রিয় করে তোলে তবে আমি এটি দেখতে কুৎসিত বলে এটি এড়াতে চাইছি এবং এটি অন্যান্য ক্ষেত্রের সাথে সামঞ্জস্যপূর্ণ নয় এবং এটি বাহ্য নয়।


আপনি কি বিকল্পগুলির আইডি দিয়ে চেষ্টা করেছেন?
অ্যাড্রিয়ান জেড।

এমডি এবং আরও বিকল্পগুলির আইডিস। যেমনটি আমি বলেছিলাম, এটি একই ডিফল্ট মানগুলি ব্যবহার করে একটি সাধারণ মাল্টিলেসেটের সাথে কাজ করে
মারিয়াস

<আইটেম name = "ডিফল্ট" xsi: টাইপ = "অ্যারে"> </ আইটেম>
Idham Choudry

@ ইডামচৌদ্রি আমি ইতিমধ্যে এটি চেষ্টা করেছি। এটি প্রশ্নে তাই বলে।
মারিয়াস

1
@ লাজি কোডার এটিতে আমার প্রশ্নটি একবার দেখুন <options class="Magento\Config\Model\Config\Source\Locale\Country"/>। আপনার একই ধরণের ক্লাস দরকার যা প্রয়োগ করে \Magento\Framework\Option\ArrayInterfaceএবং এমন একটি পদ্ধতি আছে যা toOptionArrayআপনার মানগুলির সাথে একটি অ্যারে প্রদান করে। অ্যারে থেকে প্রতিটি উপাদান অবশ্যই দেখতে হবে['value' => ..., 'label' => ...]
মারিয়াস

উত্তর:


1

আমি কাস্টম বিভাগগুলির জন্য কাজ করেছি তবে এই পদ্ধতিতে আপনাকে ডাটাবেসের মাধ্যমে দেশগুলির ডেটা সরবরাহ করতে হবে, এই কোডটি থেকে ধারণা নিতে হবে এবং আপনি ম্যাজেন্টো ডেটা প্রসারিত করে ডিবি বা স্ট্যাটিক ডেটা থেকে ডেটা সরবরাহ করতে পারেন, আশা করি এটি সহায়তা করতে পারে

এক্সএমএল কোড

    <field name="country_id">
    <argument name="data" xsi:type="array">
        <item name="options" xsi:type="object">Vendor\Module\Model\Config\Source\CountriesTree</item>
        <item name="config" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Country</item>
            <item name="formElement" xsi:type="string">select</item>
            <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item>
            <item name="elementTmpl" xsi:type="string">ui/grid/filters/elements/ui-select</item>
            <item name="dataScope" xsi:type="string">category_id</item>
            <item name="filterOptions" xsi:type="boolean">true</item>
            <item name="chipsEnabled" xsi:type="boolean">true</item>
            <item name="showCheckbox" xsi:type="boolean">true</item>
            <item name="disableLabel" xsi:type="boolean">true</item>
            <item name="multiple" xsi:type="boolean">true</item>
            <item name="levelsVisibility" xsi:type="number">1</item>
            <item name="sortOrder" xsi:type="number">30</item>
            <item name="validation" xsi:type="array">
                <item name="required-entry" xsi:type="boolean">false</item>
            </item>
            <item name="listens" xsi:type="array">
                <item name="index=create_category:responseData" xsi:type="string">setParsed</item>
                <item name="newOption" xsi:type="string">toggleOptionSelected</item>
            </item>
        </item>
    </argument>
</field>

কফিগ কোড

<?php

namespace Vendor\Module\Model\Config\Source;

class CountriesTree implements \Magento\Framework\Option\ArrayInterface
{

protected $_countryCollectionFactory;

protected $_options;

protected $_childs;


public function __construct(
    \Vendor\Module\Model\ResourceModel\Country\CollectionFactory 
 $countryCollectionFactory
) {
    $this->_countryCollectionFactory = $countryCollectionFactory;
}

public function toOptionArray()
{
    if ($this->_options === null) {
        $this->_options = $this->_getOptions();
    }
    return $this->_options;
}

protected function _getOptions($itemId = 0)
{
    $childs =  $this->_getChilds();
    $options = [];

    if (isset($childs[$itemId])) {
        foreach ($childs[$itemId] as $item) {
            $data = [
                'label' => $item->getCountry_title(),
                'value' => $item->getCountry_id(),
            ];

             if (isset($childs[$item->getCountry_id()])) {
                 $data['optgroup'] = $this->_getOptions($item->getCountry_id());
             }

            $options[] = $data;
        }
    }

    return $options;
}

protected function _getChilds()
{
    if ($this->_childs === null) {
        $this->_childs =  $this->_countryCollectionFactory->create()
            ->getGroupedChilds();
    }
    return $this->_childs;
}
}

আউটপুট এই মত দেখাচ্ছে এখানে চিত্র বর্ণনা লিখুন


ওহ ... তবে এই প্রশ্নটি 7 মাস আগে জিজ্ঞাসা করা হয়েছিল :(
শেরাজ খান

মানগুলি ইতিমধ্যে ডিবি থেকে আসে। ডিফল্ট মান নির্বাচন করার জন্য আমি যখন ডিবিতে সঞ্চিত কিছু সম্পাদনা করছি না তখন আমার কেবল "স্ক্রিন যুক্ত করুন" এ দরকার। আমি মনে করি না এটি আমার সমস্যার সমাধান করে। এছাড়াও, আমার গাছের মতো কাঠামোর দরকার নেই। আমার কাছে কেবল দেশগুলির একটি সমতল তালিকা রয়েছে।
মারিয়াস

হ্যাঁ, আমাদের অবশ্যই এটির জন্য ডিফল্ট ডেটা ব্যবহার করতে হবে, আমার ক্ষেত্রে আমি ডেটাপ্রোভাইডার লিখি তবে আপনার ক্ষেত্রে এটি দক্ষ পন্থায় নয়, এক্সএমএল এর মাধ্যমে আপনার ক্ষেত্রে উপযুক্ত
শেরাজ খান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.