Per aggiungere il filtro predefinito alla griglia in Magento2?


12

Ho creato un modulo personalizzato con l'attributo campo titolo e stato nella griglia di amministrazione.

Raccolte della griglia in module_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>

Voglio mostrare i dati che sono abilitati. Hai qualche opzione per aggiungere un filtro predefinito nelle raccolte della griglia di amministrazione ?

MODIFICARE

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

In 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'));
           }
        }
      }

Ho seguito questo link per creare la griglia di amministrazione in Magento 2

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

Risposte:


12

Se si definisce il layout di pensiero della raccolta della griglia, è possibile utilizzare l'Updater per aggiungere il filtro predefinito.

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

e

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

o Estendi blocco griglia

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

Ciao KAndy, non funziona per me. Potresti aiutarmi a risolverlo ??
Vigna S,

5
A chiunque trovi questa risposta, tieni presente che si applica solo alle reti legacy. Non griglie basate UI-componenti.
Andre Klang,

Quindi, come possiamo applicare questo tipo di filtri alla griglia basata su ui-componenti?
Knight017,

Per la griglia basata su componenti dell'interfaccia utente , può essere eseguita con lo stesso approccio di questo magento.stackexchange.com/a/178663/55259
Torrey,

5

è necessario aggiungere questo all'interno del tag argomenti:

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

se i tuoi argomenti sono contenuti in questo blocco

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

devi creare la tua classe che si estende in Magento\Backend\Block\Widget\Gridquesto modo:

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

e modifica il tag del blocco sopra in

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

se si utilizza già una griglia personalizzata e non quella predefinita Magento\Backend\Block\Widget\Grid, non è necessario creare la classe.
Devi solo copiare il _constructmetodo dall'alto nella tua classe.


Ciao @Marius, grazie per la tua risposta. Nel metodo di costruzione ho ottenuto il valore di filtro predefinito. Ma il filtro non funziona. Non troppo ottenere tutti i record
DRAJI

1
forse dovresti aggiungere più codice alla domanda per avere una visione migliore.
Marius

Ho aggiornato la mia domanda con il codice filtro quello che ho aggiunto
DRAJI

Grande. Darò un nuovo look e tornerò con un risultato.
Marius

Ciao Marius, ci ho provato ma non funziona, hai trovato una soluzione?
Vigna S,

0

ecco il riferimento su devdocs:

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

Se hai bisogno di maggiori informazioni a riguardo - puoi creare una richiesta pull o un problema tramite la pagina dei documenti - fai semplicemente clic sul link "Modifica questa pagina su GitHub". I documenti vengono costantemente aggiornati e migliorati.


1
il link che hai citato mostra come aggiungere filtri in una griglia che utilizza i componenti dell'interfaccia utente. Penso che la domanda riguardi la modifica di una griglia che si estende Magento\Backend\Block\Widget\Grid. Ma potrei sbagliarmi.
Marius

Ciao @EquinoxBlack Grazie per la tua risposta. Ma usando il componente UI
DRAJI

0

Dopo aver provato molti codici che non funzionano, finalmente trova un modo che non ha bisogno di codifica : usa la funzione di salvataggio delle viste personalizzate che potrebbe salvare le impostazioni di filtro e colonna.

Passaggi specifici

Dopo aver impostato le impostazioni di filtro e colonna, fai clic sul Default Viewpulsante con l'icona a forma di occhio, quindi fai clic Save View As…per inserire un nome per la visualizzazione. Quindi puoi fare clic sulla vista personalizzata ogni volta che vuoi ottenere la griglia nel modo che preferisci e puoi salvare le viste personalizzate quante ne desideri.

Puoi anche tornare indietro e utilizzare l'icona di modifica per rinominarla o eliminarla in un secondo momento o per tornare alla vista predefinita.

Penso che questa sia un'ottima funzione in Magento 2 :)

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.