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

DRAJI
quelle

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

Marius
quelle
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.

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

Schlüssel Shang
quelle