Magento2 में ग्रिड में डिफ़ॉल्ट फ़िल्टर जोड़ने के लिए?


12

मैंने व्यवस्थापक ग्रिड में शीर्षक और स्थिति फ़ील्ड विशेषता के साथ एक कस्टम मॉड्यूल बनाया है।

मॉड्यूल_test_grid_block.xml में ग्रिड संग्रह

        <arguments>
             <argument name="id" xsi:type="string">testGrid</argument>
             <argument name="dataSource" xsi:type="object">Namespace\Module\Model\ResourceModel\test\Collection</argument>
             <argument name="default_sort" xsi:type="string">id</argument>
             <argument name="default_dir" xsi:type="string">desc</argument>                             
             <argument name="grid_url" xsi:type="url" path="*/*/grid"><param name="_current">1</param></argument>
         </arguments>

मैं उन आंकड़ों को दिखाना चाहता हूं जो सक्षम हैं। क्या आपके पास व्यवस्थापक ग्रिड संग्रह में डिफ़ॉल्ट फ़िल्टर जोड़ने का कोई विकल्प है ?

संपादित करें

    <block class="Namespace\Module\Block\Adminhtml\Test\Grid" name="namespace_module_test.grid" as="grid">
       <arguments>
             <argument name="id" xsi:type="string">testGrid</argument>
             <argument name="dataSource" xsi:type="object">Namespace\Module\Model\ResourceModel\test\Collection</argument>
             <argument name="default_sort" xsi:type="string">id</argument>
             <argument name="default_dir" xsi:type="string">desc</argument>                             
             <argument name="grid_url" xsi:type="url" path="*/*/grid"><param name="_current">1</param></argument>
             <argument name="default_filter" xsi:type="array">
                  <item name="status" xsi:type="string">1</item>
             </argument>
         </arguments>
        .
        .
      </block>

ब्लॉक में - Grid.php

    namespace Namespace\Module\Block\Adminhtml\Test;

    use Magento\Backend\Block\Widget\Grid as WidgetGrid;

     class Grid extends WidgetGrid
        {
          public function _construct()
           {
            parent::_construct(); 
            if ($this->hasData('default_filter')) {
            // print_r($this->getData('default_filter'));die;
            $this->setDefaultFilter($this->getData('default_filter'));
           }
        }
      }

मैंने Magento 2 में व्यवस्थापक ग्रिड बनाने के लिए इस लिंक का अनुसरण किया है

http://www.mage-world.com/blog/grid-and-form-in-magento-2-admin-panel-part-1.html

जवाबों:


12

यदि आप ग्रिड संग्रह विचार लेआउट को परिभाषित करते हैं तो आप डिफ़ॉल्ट फ़िल्टर को जोड़ने के लिए अपडेटर का उपयोग कर सकते हैं।

<argument name="dataSource" xsi:type="object">
    Tutorial\SimpleNews\Model\Resource\News\Collection
    <updater>Tutorial\SimpleNews\Model\Resource\News\Collection\Updater</updater>
</argument>

तथा

<?php
namespace Tutorial\SimpleNews\Model\Resource\News\Collection;

class CollectionUpdater implements \Magento\Framework\View\Layout\Argument\UpdaterInterface
{

    /**
     * Update grid collection according to chosen order
     *
     * @param \Tutorial\SimpleNews\Model\Resource\News\Collection $argument
     * @return \Tutorial\SimpleNews\Model\Resource\News\Collection
     */
    public function update($argument)
    {
        $argument->addFieldToFilter('you_field', 'value');

        return $argument;
    }
}

या ग्रिड ब्लॉक बढ़ाएँ

class Grid extends \Magento\Backend\Block\Widget\Grid
{
    protected function _prepareCollection()
    {
        if ($this->getCollection()) {
            foreach ($this->getDefaultFilter() as $field => $value) {
                $this->getCollection()->addFieldToFilter($field, $value);
            }
        }
        return parent::_prepareCollection();
    }   
}

हाय कांडी, यह मेरे लिए काम नहीं कर रहा है। क्या आप मुझे इसे सुलझाने में मदद कर सकते हैं ??
विग्ना एस

5
इस उत्तर को खोजने वाले किसी के लिए, कृपया ध्यान दें कि यह केवल विरासत ग्रिड पर लागू होता है। नहीं यूआई घटक आधारित ग्रिड।
आंद्रे क्लैंग

तो, हम इस प्रकार के फिल्टर को यूआई-घटक आधारित ग्रिड पर कैसे लागू कर सकते हैं?
नाइट ०१7

के लिए यूआई घटक आधारित ग्रिड , तो वह ऐसा ही दृष्टिकोण के साथ किया जा सकता है magento.stackexchange.com/a/178663/55259
टोरी

5

आपको इसे तर्क टैग के अंदर जोड़ना होगा:

<argument name="default_filter" xsi:type="array">
    <item name="field_name_here" xsi:type="string">value here</item>
</argument>

यदि आपके तर्क इस ब्लॉक में निहित हैं

<block class="Magento\Backend\Block\Widget\Grid" name="some.name.here" as="grid">

आपको अपना खुद का वर्ग बनाने की जरूरत है Magento\Backend\Block\Widget\Gridजो इस तरह से विस्तारित हो :

<?php 
namespace Namespace\Module\Block\Adminhtml\Whatever;

class Grid extends \Magento\Backend\Block\Widget\Grid
{
    public function _construct()
    {
        parent::_construct(); 
        if ($this->hasData('default_filter')) {
            $this->setDefaultFilter($this->getData('default_filter'));
        }
    }
}

और ऊपर ब्लॉक टैग को संशोधित करें

 <block class="Namespace\Module\Block\Adminhtml\Whatever\Grid" name="some.name.here" as="grid">

यदि आप पहले से ही एक कस्टम ग्रिड का उपयोग करते हैं और डिफ़ॉल्ट नहीं है तो Magento\Backend\Block\Widget\Gridआपको कक्षा बनाने की आवश्यकता नहीं है।
आपको बस _constructअपनी कक्षा में ऊपर से विधि की प्रतिलिपि बनाने की आवश्यकता है ।


हाय @ मायर, आपकी प्रतिक्रिया के लिए धन्यवाद। निर्माण विधि में मुझे डिफ़ॉल्ट फ़िल्टर मान मिला। लेकिन फ़िल्टरिंग काम नहीं कर रहा है। बहुत सारे रिकॉर्ड भी नहीं
DRAJI

1
हो सकता है कि आपको एक बेहतर अवलोकन प्राप्त करने के लिए प्रश्न में अधिक कोड जोड़ना चाहिए।
मेरियस

मैंने अपने प्रश्न को फ़िल्टर कोड के साथ अपडेट किया है जो मैंने जोड़ा है
DRAJI

महान। मैं एक नया रूप लूंगा और एक परिणाम के साथ वापस आऊंगा।
मेरियस

हाय मारियस, मैंने यह कोशिश की, लेकिन यह काम नहीं कर रहा है, क्या आपने कोई समाधान पाया है?
विग्ना एस

0

यहाँ देवदूतों पर संदर्भ दिया गया है:

http://devdocs.magento.com/guides/v2.0/ui-components/ui-secondary-filter.html

यदि आपको उस पर अधिक जानकारी की आवश्यकता है - आप डॉक्स पृष्ठ के माध्यम से एक पुल अनुरोध या एक समस्या बना सकते हैं - बस "इस पृष्ठ को गीथहब पर संपादित करें" लिंक पर क्लिक करें। डॉक्स लगातार अपडेट और बेहतर किए जाते हैं।


1
आपके द्वारा बताए गए लिंक से पता चलता है कि एक ग्रिड में फिल्टर कैसे जोड़ा जाता है जो यूआई घटकों का उपयोग करता है। मुझे लगता है कि सवाल एक ग्रिड को बदलने के बारे में है जो फैली हुई है Magento\Backend\Block\Widget\Grid। लेकिन हो सकता है मैं गलत हूं।
मेरियस

हाय @EquinoxBlack आपकी प्रतिक्रिया के लिए धन्यवाद। लेकिन यह यूआई घटक का उपयोग करके
DRAJI

0

कई कोड की कोशिश करने के बाद, जो काम नहीं करता है, अंत में एक ऐसा तरीका ढूंढना है जिसमें कोडिंग की आवश्यकता नहीं है - कस्टम व्यू फ़ंक्शन को सहेजने का उपयोग करें जो फ़िल्टर और कॉलम सेटिंग्स को बचा सकता है।

विशिष्ट कदम

फ़िल्टर और कॉलम सेटिंग सेट करने के बाद , Default Viewनेत्र आइकन के साथ बटन पर क्लिक करें , फिर Save View As…अपने दृश्य के लिए एक नाम दर्ज करने के लिए क्लिक करें । तब आप कस्टम दृश्य पर क्लिक कर सकते हैं, जब भी आप ग्रिड को अपने पसंद के अनुसार प्राप्त करना चाहते हैं, और आप जितने चाहें उतने कस्टम दृश्य सहेज सकते हैं।

आप वापस भी जा सकते हैं और इसे बदलने के लिए संपादन आइकन का उपयोग कर सकते हैं या इसे बाद में हटा सकते हैं, या डिफ़ॉल्ट दृश्य पर वापस आ सकते हैं।

मुझे लगता है कि यह Magento 2 में एक बहुत अच्छा कार्य है :)

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.