Aby dodać domyślny filtr do siatki w Magento2?


12

Utworzyłem jeden niestandardowy moduł z atrybutem pola tytułu i statusu w siatce administratora.

Kolekcje siatki w 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>

Chcę pokazać dane, które są włączone. Czy masz opcję dodania domyślnego filtru w kolekcjach administratora ?

EDYTOWAĆ

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

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

Skorzystałem z tego linku, aby utworzyć siatkę administracyjną w Magento 2

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

Odpowiedzi:


12

Jeśli zdefiniujesz układ myśli kolekcji siatki, możesz użyć narzędzia do aktualizacji, aby dodać domyślny filtr.

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

i

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

lub Rozszerz blok siatki

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

Cześć KAndy, To nie działa dla mnie. Czy możesz mi pomóc to rozwiązać?
— Vigna S

5
Każdemu, kto znajdzie tę odpowiedź, należy pamiętać, że dotyczy ona tylko starszych sieci. Nie UI jednoskładnikowe na bazie siatki.
— Andre Klang,

Jak więc zastosować ten typ filtrów do siatki opartej na interfejsie użytkownika?
— Knight017

W przypadku siatki opartej na interfejsie UI można to zrobić przy użyciu tego samego podejścia, jak ten magento.stackexchange.com/a/178663/55259
— Torrey

5

musisz dodać to wewnątrz tagu argumenty:

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

jeśli twoje argumenty są zawarte w tym bloku

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

musisz stworzyć własną klasę, która rozszerza się w Magento\Backend\Block\Widget\Gridnastępujący sposób:

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

i zmodyfikuj powyższy znacznik bloku na

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

jeśli już używasz niestandardowej siatki, a nie domyślnej Magento\Backend\Block\Widget\Grid, nie musisz tworzyć klasy.
Musisz tylko skopiować _constructmetodę z góry w swojej klasie.


Cześć @Marius, Dziękuję za odpowiedź. W metodzie konstruowania mam domyślną wartość filtru. Ale filtrowanie nie działa. Nie wszystkie rekordy
— DRAJI,

1
może powinieneś dodać więcej kodu do pytania, aby uzyskać lepszy przegląd.
— Marius

Zaktualizowałem moje pytanie o kod filtru, który dodałem
— DRAJI

Wspaniały. Spojrzę na nowy wygląd i wrócę z rezultatem.
— Marius

Cześć Marius, próbowałem tego, ale to nie działa, znalazłeś jakieś rozwiązanie?
— Vigna S

0

tutaj jest odniesienie do devdocs:

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

Jeśli potrzebujesz więcej informacji na ten temat - możesz utworzyć żądanie ściągnięcia lub problem za pośrednictwem strony z dokumentami - po prostu kliknij link „Edytuj tę stronę w GitHub”. Dokumenty są stale aktualizowane i ulepszane.


1
wspomniany link pokazuje, jak dodać filtry w siatce korzystającej ze składników interfejsu użytkownika. Myślę, że pytanie dotyczy zmiany siatki, która się rozszerza Magento\Backend\Block\Widget\Grid. Ale mogę się mylić.
— Marius

Cześć @EquinoxBlack Dziękujemy za odpowiedź. Ale to za pomocą komponentu interfejsu użytkownika
— DRAJI 13.01.16

0

Po wypróbowaniu wielu kodów, które nie działają, w końcu znajdź sposób, który nie wymaga kodowania - skorzystaj z funkcji zapisywania niestandardowych widoków, które mogłyby zapisać ustawienia filtrów i kolumn.

Konkretne kroki

Po ustawieniu ustawień filtra i kolumny kliknij Default Viewprzycisk z ikoną oka, a następnie kliknij, Save View As…aby wprowadzić nazwę widoku. Następnie możesz kliknąć widok niestandardowy, gdy chcesz uzyskać siatkę tak, jak lubisz, i możesz zapisać widoki niestandardowe, ile chcesz.

Możesz także wrócić i użyć ikony edycji, aby zmienić jego nazwę lub usunąć ją później, lub aby powrócić do domyślnego widoku.

Myślę, że jest to bardzo dobra funkcja w Magento 2 :)

wprowadź opis zdjęcia tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.