So fügen Sie dem Raster in Magento2 einen Standardfilter hinzu?


11

Ich habe ein benutzerdefiniertes Modul mit dem Attribut title & status field im Admin-Grid erstellt.

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

Ich möchte die Daten anzeigen, die aktiviert sind. Haben Sie eine Option zum Hinzufügen eines Standardfilters in Admin-Grid-Sammlungen ?

BEARBEITEN

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

Ich bin diesem Link gefolgt, um ein Admin-Raster in Magento 2 zu erstellen

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

Antworten:


12

Wenn Sie ein Gedankenlayout für die Rastersammlung definieren, können Sie den Updater verwenden, um einen Standardfilter hinzuzufügen.

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

und

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

oder Rasterblock erweitern

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

Hallo KAndy, es funktioniert nicht bei mir. Könnten Sie mir helfen, das zu klären?
Vigna S

3
Wenn Sie diese Antwort finden, beachten Sie bitte, dass sie nur für ältere Raster gilt. Keine UI-Komponenten-basierten Grids.
Andre Klang

Wie können wir diese Art von Filtern auf UI-Komponenten-basierte Raster anwenden?
Knight017

5

Sie müssen dies innerhalb des Argument-Tags hinzufügen:

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

wenn Ihre Argumente in diesem Block enthalten sind

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

Sie müssen Ihre eigene Klasse erstellen, die sich Magento\Backend\Block\Widget\Gridwie folgt erstreckt :

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

und ändern Sie das obige Block-Tag in

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

Wenn Sie bereits ein benutzerdefiniertes Raster verwenden und nicht das Standardraster, müssen Magento\Backend\Block\Widget\GridSie die Klasse nicht erstellen.
Sie müssen nur die _constructMethode von oben in Ihre Klasse kopieren .


Hallo @Marius, vielen Dank für Ihre Antwort. In der Konstruktmethode habe ich den Standardfilterwert erhalten. Aber das Filtern funktioniert nicht. Nicht zu alle Rekorde bekommen
DRAJI

1
Vielleicht sollten Sie der Frage mehr Code hinzufügen, um einen besseren Überblick zu erhalten.
Marius

Ich habe meine Frage mit
Filtercode

Groß. Ich werde einen neuen Blick darauf werfen und mit einem Ergebnis zurückkommen.
Marius

Hallo Marius, ich habe es versucht, aber es funktioniert nicht. Hast du eine Lösung gefunden?
Vigna S

0

Hier ist die Referenz zu Devdocs:

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

Wenn Sie weitere Informationen dazu benötigen - Sie können eine Pull-Anfrage oder ein Problem über die Dokumentenseite erstellen - klicken Sie einfach auf den Link "Diese Seite auf GitHub bearbeiten". Die Dokumente werden ständig aktualisiert und verbessert.


1
Der von Ihnen erwähnte Link zeigt, wie Sie Filter in ein Raster einfügen, das die UI-Komponenten verwendet. Ich denke, die Frage ist, ein Gitter zu ändern, das sich ausdehnt Magento\Backend\Block\Widget\Grid. Aber ich kann mich irren.
Marius

Hi @EquinoxBlack Vielen Dank für Ihre Antwort. Aber es mit UI-Komponente
DRAJI

0

Nachdem Sie viele Codes ausprobiert haben, die nicht funktionieren, müssen Sie endlich einen Weg finden , für den keine Codierung erforderlich ist. Verwenden Sie die Funktion zum Speichern benutzerdefinierter Ansichten , mit der Filter- und Spalteneinstellungen gespeichert werden können.

Spezifische Schritte

Nach Einstellung Einstellungen Filter und Spalte, klicken Sie auf die Default ViewSchaltfläche mit dem Augensymbol, und klicken Sie Save View As…auf einen Namen für die Ansicht ein. Dann können Sie auf die benutzerdefinierte Ansicht klicken, wann immer Sie das Raster ganz nach Ihren Wünschen erhalten möchten, und Sie können benutzerdefinierte Ansichten so viele speichern, wie Sie möchten.

Sie können auch zurückgehen und das Bearbeitungssymbol verwenden, um es umzubenennen oder später zu löschen oder um zur Standardansicht zurückzukehren.

Ich denke, das ist eine sehr gute Funktion in Magento 2 :)

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.