ম্যাজেন্টো 2: আমি কীভাবে পূর্বনির্ধারিত ফিল্টার মান সহ একটি প্রশাসক গ্রিড লোড করতে পারি?


14

আমি পূর্বনির্ধারিত ফিল্টারগুলি সহ আমার প্রশাসকটিতে একটি কাস্টম গ্রিডের লিঙ্ক তৈরি করতে চাই। গ্রিডটি একটি ইউআই তালিকাবদ্ধকরণ উপাদান (এক্সএমএল) দিয়ে তৈরি করা হয়েছে এবং এটির একটি কলাম রয়েছে form_idযা সেটআপ হয়:

<column name="form_id">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="filter" xsi:type="string">textRange</item>
            <item name="label" xsi:type="string" translate="true">Form id</item>
        </item>
    </argument>
</column>

গ্রিড ঠিক কাজ করে। আমি ফিল্টার প্রয়োগ করতে পারি এবং সবকিছু ভালভাবে কাজ করে। গ্রিডটি এক্সএইচআর অনুরোধের সাথে সুন্দরভাবে আপডেট হয়।

তবে ... আমি ফিল্টারগুলির মানটি কোনও সময়ে প্রাক-সংজ্ঞায়িত করতে সক্ষম হতে চাই। উদাহরণস্বরূপ, আমি গ্রিডটি আইডি = 3-এ ফিল্টার করা অবস্থায় খুলতে সক্ষম হতে চাই।

সুতরাং আমি XHR- অনুরোধের মতো একই ইউআরএল প্যারামিটারগুলি সহ পৃষ্ঠাটি লোড করার চেষ্টা করেছি, কেবল কেবলমাত্র প্রয়োজনীয় প্যারামিটারগুলি যুক্ত করে:

?namespace=form_response_listing&search=&filters[placeholder]=true&filters[form_id][from]=3&filters[form_id][to]=3&paging[pageSize]=20&paging[current]=1

পাশাপাশি:

?filters[form_id][from]=3&filters[form_id][to]=3

কোন সাফল্য সঙ্গে উভয়। তাহলে কীভাবে আমি ইউআরএল ব্যবহার করে ফিল্টারগুলি প্রাক-পূরণ করতে পারি?

সম্পাদনা:

আমি নিশ্চিত নই যে এটি অন্য প্রশ্নের সদৃশ কিনা (নীচের মন্তব্যে উল্লিখিত)। আমার ক্ষেত্রে, আমি আমার গ্রিডের সংগ্রহ হিসাবে ভার্চুয়াল ধরণের ব্যবহার করছি:

<virtualType name="Vendor\Module\Model\ResourceModel\Response\Grid\Collection"
             type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
    <arguments>
        <argument name="mainTable" xsi:type="string">vendormodule_form_response</argument>
        <argument name="resourceModel" xsi:type="string">Vendor\Module\Model\ResourceModel\Response</argument>
    </arguments>
</virtualType>

সুতরাং এটি এমন নয় যে আমার গ্রিড উইজেটের জন্য আমার একটি শারীরিক ব্লক ক্লাস রয়েছে, এটি খাঁটিভাবে একটি ইউআই উপাদান তালিকাভুক্ত এক্সএমএল দিয়ে তৈরি করা হয়েছে।

তবুও, আমি যেভাবেই জিজ্ঞাসা করেছি তা আমার ব্যবহারের ক্ষেত্রে সহায়তা করবে কিনা তা আমি যাচাই করব।



2
@ রাফেলাতডিজিটালপিয়ানিজম আমার মনে হয় না এটি একটি সদৃশ। গ্রিডগুলি সম্পর্কে আপনি যে প্রশ্নটি যুক্ত করেছেন তা পুরানো ফ্যাশন উপায়ে তৈরি হয়। গ্রিড ব্লক এবং ইউআই-উপাদানগুলির মধ্যে কিছু। এটি মূলত এমন কিছু ছিল যেখানে আপনার এখনও গ্রিড ব্লক ছিল তবে সেগুলি prepareColumnsপদ্ধতির পরিবর্তে কোনও এক্সএমএল ফাইলে কনফিগার করা হয়েছিল ।
মারিয়াস

@ মারিয়াসের ভোট প্রত্যাহার;)
রাফেল ডিজিটাল পিয়ানিজমে

1
আমি আমার প্রশ্নটি সম্পাদনা করেছি, যেহেতু আমিও এটি একটি সদৃশ বলে মনে করি না (আমি আমার গবেষণাটি করেছি ;-))
জিয়েল বার্কার্স

@ জিল বার্কার্স আমি একই ইস্যু
পাচ্ছি

উত্তর:


9

আমি এখন পর্যন্ত যা জানতে পেরেছি তা এখানে।
এটি সম্পূর্ণ নয় তবে এটি আপনাকে সঠিক পথে নিয়ে যেতে পারে।
আমি সিমস পৃষ্ঠা তালিকাটি ইউআই উপাদান সংশোধন করে আমার পরীক্ষা চালিয়েছি।
আমি এটি যোগ

<item name="filter_url_params" xsi:type="array">
    <item name="page_id" xsi:type="string">*</item>
</item>

মধ্যে cms_page_listing.xmlডেটা / কনফিগ যুক্তি ভিতরে ডেটাউত্স নোড ভিতরে। সুতরাং এখন এটির মতো দেখাচ্ছে

<dataSource name="cms_page_listing_data_source">
    <argument name="dataProvider" xsi:type="configurableObject">
        <argument name="class" xsi:type="string">Magento\Cms\Ui\Component\DataProvider</argument>
        <argument name="name" xsi:type="string">cms_page_listing_data_source</argument>
        <argument name="primaryFieldName" xsi:type="string">page_id</argument>
        <argument name="requestFieldName" xsi:type="string">id</argument>
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
                <item name="update_url" xsi:type="url" path="mui/index/render"/>
                <item name="storageConfig" xsi:type="array">
                    <item name="indexField" xsi:type="string">page_id</item>
                </item>
                <item name="filter_url_params" xsi:type="array"><!-- my addition -->
                    <item name="page_id" xsi:type="string">*</item>
                </item>
            </item>
        </argument>
    </argument>
</dataSource>

এটি আমাকে ইউআরএল কল করতে দেয় ROOT/admin/cms/page/index/key/<form_key_here>/?page_id=2
এবং আমি কেবল পৃষ্ঠা 2 আইডি সহ দেখতে পাচ্ছি
তবে এটি পরিসীমা ফিল্টারগুলির জন্য কাজ করে না এবং ফিল্টার মান পূরণ হয় না not এটি এখনও ফাঁকা হিসাবে দেখায়।

এখন এখানে কেন এটি সম্ভব।

সেমি পৃষ্ঠাগুলির জন্য ডেটাপ্রভাইডার ক্লাস Magento\Cms\Ui\Component\DataProvider
এই এক প্রসারিত Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider
এটি সর্বশেষে একটি সুরক্ষিত পদ্ধতি বলেprepareUpdateUrl

protected function prepareUpdateUrl()
{
    if (!isset($this->data['config']['filter_url_params'])) {
        return;
    }
    foreach ($this->data['config']['filter_url_params'] as $paramName => $paramValue) {
        if ('*' == $paramValue) {
            $paramValue = $this->request->getParam($paramName);
        }
        if ($paramValue) {
            $this->data['config']['update_url'] = sprintf(
                '%s%s/%s',
                $this->data['config']['update_url'],
                $paramName,
                $paramValue
            );
            $this->addFilter(
                $this->filterBuilder->setField($paramName)->setValue($paramValue)->setConditionType('eq')->create()
            );
        }
    }
}

এটি যা করে তা হ'ল ইউআই উপাদান কনফিগারেশনে চেক করা যদি কোনও উপাদান বলা হয় filter_url_params। যদি এটি থাকে তবে এটি এর ভিতরে সমস্ত মান গ্রহণ করে এবং এর সাথে সংজ্ঞাযুক্ত মানগুলির অনুরোধটি পরীক্ষা করে filter_url_params
কিন্তু ডিফল্টরূপে এটি শুধুমাত্র সাথে কাজ করে eq

আপনি যা চেষ্টা করতে পারেন তা হ'ল আপনার উপাদানটির জন্য একটি কাস্টম ডেটা সোর্স থাকা উচিত যেখানে আপনি পদ্ধতিটি পুনরায় লেখেন এবং আপনার prepareUpdateUrlপ্রয়োজনীয় সমস্ত অনুরোধের ভেরিয়েবলগুলি অ্যাকাউন্টে নেওয়া এবং সম্ভবত এটিতে পেজিং যোগ করা এবং ফিল্টারিং পরিসীমা করা।

পার্শ্ব নোট: এটি একটি খুব আকর্ষণীয় প্রশ্ন। আমি নিশ্চিত ভবিষ্যতে অনেক লোকের এটির প্রয়োজন হবে।


আপনার উত্তরের জন্য @ মারিয়াসকে ধন্যবাদ এটি আমার পরিস্থিতির জন্য কাজ করে, কারণ লিঙ্কটি সর্বদা একটি আইডি দিয়ে ফিল্টার করা দরকার, কোনও পরিসরের দ্বারা নয় (পরিসরটি কমবেশি একটি বৈশিষ্ট্যযুক্ত তবে আমার ইউআরএল দ্বারা প্রয়োজনীয় নয়)। আপনার উত্তর পাশাপাশি আপনার ব্যাখ্যা আমাকে অনেক সাহায্য করেছিল!
জিল বার্কার্স 18'17

1
@ মারিয়াস আমি কি এইভাবে ইউআরএলটি ব্যবহার করতে পারি ROOT/admin/cms/page/index/page_id/2/key/<form_key_here>, কারণ আমি $this->urlBuilder->getUrl(static::URL_PATH,[ 'page_id' => $item['id']])ইউআইকম্পেন্ট / তালিকা / কলামে ব্যবহার করছি
সাধারণ লোক

ফিল্টার করতে আমি কীভাবে একাধিক প্যারাম ব্যবহার করব, যেমন ROOT / অ্যাডমিন / সেমি / পৃষ্ঠা / সূচক / প্যারাম_1 / ভাল 1 / প্যারাম_2 / ভাল 2 / প্যারাম_3 / ভাল 3 / কী / <for_key_ এখানে> <আইটেম নাম = "ফিল্টার_উর_প্রেমস" এর অধীনে তিনটি প্যারাম দেওয়া হচ্ছে xsi: টাইপ = "অ্যারে"> পৃথক ফিল্টারগুলির জন্য কাজ করে তবে সম্মিলিতভাবে নয়।
শথিশ

@ মারিয়াস! ইউরার লাইফ সেভার!
জোরক্স

@ মারিয়াস: আপনার কী ধারণা, কীভাবে একাধিক ইউআরএল পরমের জন্য কার্যকারিতা যেমন ROOT / অ্যাডমিন / সিমি / পৃষ্ঠা / সূচক / প্যারাম_1 / ভাল 1 / প্যারাম_2 / ভাল 2 / প্যারাম_3 / ভাল 3 / কী / <ফর্ম_কি_এইএ> ব্যবহার করতে হয় ইতোমধ্যে শথীশ দ্বারা উল্লেখ করা হয়েছে
আশীষ রাজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.