Magento2'deki ızgaraya varsayılan filtre eklemek için?


12

Yönetici kılavuzunda başlık ve durum alanı özniteliğine sahip bir özel modül oluşturdum.

Module_test_grid_block.xml dosyasındaki ızgara koleksiyonları

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

Etkinleştirilen verileri göstermek istiyorum. Yönetici ızgarası koleksiyonlarına varsayılan filtre ekleme seçeneğiniz var mı ?

DÜZENLE

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

Blokta - 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'de yönetici ızgarası oluşturmak için bu bağlantıyı takip ettim

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

Yanıtlar:


12

Izgara koleksiyonu düşünce düzenini tanımlarsanız, varsayılan filtre eklemek için güncelleyiciyi kullanabilirsiniz.

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

ve

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

veya Izgara bloğunu genişlet

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

Merhaba KAndy, Benim için çalışmıyor. Çözmem için bana yardım eder misin?
Vigna S

5
Bu yanıtı bulan herkes için, bunun yalnızca eski ızgaralar için geçerli olduğunu lütfen unutmayın. Değil UI bileşenli göre ızgaralar.
Andre Klang

Peki, bu tür filtreleri kullanıcı arabirimi tabanlı ızgaraya nasıl uygulayabiliriz?
Knight017

İçin kullanıcı arayüzü bileşenli göre ızgara , bu gibi aynı yaklaşım ile yapılabilir magento.stackexchange.com/a/178663/55259
Torrey

5

bunu arguments etiketinin içine eklemeniz gerekir:

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

argümanlarınız bu blokta bulunuyorsa

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

şu şekilde uzanan kendi sınıfınızı oluşturmanız gerekir 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'));
        }
    }
}

ve yukarıdaki blok etiketini

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

Zaten varsayılan değil özel bir ızgara kullanıyorsanız Magento\Backend\Block\Widget\Gridsınıfı oluşturmanız gerekmez. Sınıfınızda yukarıdaki yöntemi
kopyalamanız yeterlidir _construct.


Merhaba @Marius, Yanıtınız için teşekkür ederim. Yapım yönteminde varsayılan filtre değerini aldım. Ancak filtreleme çalışmıyor. Çok fazla kayıt
almıyorsunuz

1
belki daha iyi bir genel bakış için soruya daha fazla kod eklemelisiniz.
Marius

Ne eklediğimi filtre koduyla sorumu güncelledim
DRAJI

Harika. Yeni bir göz atacağım ve bir sonuçla geri döneceğim.
Marius

Merhaba Marius, bunu denedim ama işe yaramıyor, herhangi bir çözüm buldunuz mu?
Vigna S

0

İşte devdocs referans:

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

Bununla ilgili daha fazla bilgiye ihtiyacınız varsa - dokümanlar sayfası üzerinden bir çekme isteği veya sorun oluşturabilirsiniz - "Bu sayfayı GitHub'da düzenle" bağlantısını tıklamanız yeterlidir. Dokümanlar sürekli güncellenir ve geliştirilir.


1
bahsettiğiniz bağlantı, ui bileşenlerini kullanan bir ızgaraya nasıl filtre ekleneceğini gösterir. Bence soru uzayan bir tabloyu değiştirmekle ilgili Magento\Backend\Block\Widget\Grid. Ama yanılmış olabilirim.
Marius

Merhaba @EquinoxBlack Yanıtınız için teşekkür ederiz. Ama UI bileşeni kullanarak
DRAJI

0

Çalışmayan birçok kodu denedikten sonra, kodlamaya gerek duymayan bir yol bulun - filtre ve sütun ayarlarını kaydedebilecek özel görünümleri kaydetme işlevini kullanın .

Belirli adımlar

Filtre ve sütun ayarlarını yaptıktan sonraDefault View , göz simgesine sahip düğmeyi tıklayın, ardından Save View As…görünümünüz için bir ad girmek için tıklayın. Ardından, ızgarayı istediğiniz gibi elde etmek istediğinizde özel görünümü tıklayabilirsiniz ve özel görünümleri istediğiniz kadar kaydedebilirsiniz.

Ayrıca geri dönüp yeniden adlandırmak veya daha sonra silmek veya varsayılan görünüme dönmek için düzenle simgesini kullanabilirsiniz.

Bu Magento 2'de çok iyi bir fonksiyon olduğunu düşünüyorum :)

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.