Pour ajouter un filtre par défaut à la grille dans Magento2?

12

J'ai créé un module personnalisé avec un attribut de champ de titre et de statut dans la grille d'administration.

Collections de grilles dans 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>

Je souhaite afficher les données activées. Avez-vous la possibilité d'ajouter un filtre par défaut dans les collections de la grille d'administration ?

ÉDITER

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

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

J'ai suivi ce lien pour créer une grille d'administration dans magento 2

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

DRAJI
la source

Réponses:

12

Si vous définissez la disposition de la pensée de la collection de grilles, vous pouvez utiliser le programme de mise à jour pour ajouter un filtre par défaut.

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

et

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

ou étendre le bloc de la grille

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();
    }   
}
KAndy
la source
Salut KAndy, ça ne marche pas pour moi. Pourriez-vous m'aider à faire le tri?
Vigna S
5
Pour quiconque trouve cette réponse, veuillez noter qu'elle ne s'applique qu'aux grilles héritées. Non grilles à base de composants de l' interface.
Andre Klang
Alors, comment pouvons-nous appliquer ce type de filtres à une grille basée sur des composants ui?
Knight017
Pour la grille basée sur les composants d'interface utilisateur , cela peut être fait avec la même approche que celle-ci magento.stackexchange.com/a/178663/55259
Torrey
5

vous devez ajouter ceci à l'intérieur de la balise arguments:

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

si vos arguments sont contenus dans ce bloc

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

vous devez créer votre propre classe qui s'étend Magento\Backend\Block\Widget\Gridcomme ceci:

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

et modifiez la balise de bloc ci-dessus pour

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

si vous utilisez déjà une grille personnalisée et non la valeur par défaut, Magento\Backend\Block\Widget\Gridvous n'avez pas besoin de créer la classe.
Il vous suffit de copier la _constructméthode ci-dessus dans votre classe.

Marius
la source
Bonjour @Marius, Merci pour votre réponse. Dans la méthode de construction, j'ai obtenu la valeur de filtre par défaut. Mais le filtrage ne fonctionne pas. Pas trop de records
DRAJI
1
vous devriez peut-être ajouter plus de code à la question pour obtenir un meilleur aperçu.
Marius
J'ai mis à jour ma question avec le code de filtre ce que j'ai ajouté
DRAJI
Génial. Je vais prendre un nouveau look et revenir avec un résultat.
Marius
Salut Marius, j'ai essayé mais ça ne marche pas, as-tu trouvé une solution?
Vigna S
0

voici la référence sur devdocs:

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

Si vous avez besoin de plus d'informations à ce sujet - vous pouvez créer une demande de tirage ou un problème via la page des documents - cliquez simplement sur le lien "Modifier cette page sur GitHub". Les documents sont constamment mis à jour et améliorés.

EquinoxBlack
la source
1
le lien que vous avez mentionné montre comment ajouter des filtres dans une grille qui utilise les composants de l'interface utilisateur. Je pense que la question est de changer une grille qui s'étend Magento\Backend\Block\Widget\Grid. Mais je peux me tromper.
Marius
Salut @EquinoxBlack Merci pour votre réponse. Mais en utilisant le composant UI
DRAJI
0

Après avoir essayé de nombreux codes qui ne fonctionnent pas, trouvez enfin un moyen qui n'a pas besoin de codage - utilisez la fonction d' enregistrement des vues personnalisées qui pourrait enregistrer les paramètres de filtre et de colonne.

Étapes spécifiques

Après avoir défini les paramètres de filtre et de colonne, cliquez sur le Default Viewbouton avec l'icône en forme d'œil, puis cliquez Save View As…pour entrer un nom pour votre vue. Ensuite, vous pouvez cliquer sur la vue personnalisée chaque fois que vous souhaitez obtenir la grille comme vous l'aimez, et vous pouvez enregistrer autant de vues personnalisées que vous le souhaitez.

Vous pouvez également revenir en arrière et utiliser l'icône de modification pour la renommer ou la supprimer ultérieurement, ou pour revenir à la vue par défaut.

Je pense que c'est une très bonne fonction dans Magento 2 :)

entrez la description de l'image ici

Key Shang
la source