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

DRAJI
źródło

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();
    }   
}
KAndy
źródło
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.

Marius
źródło
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.

EquinoxBlack
źródło
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

Key Shang
źródło