Para adicionar um filtro padrão à grade no Magento2?

12

Criei um módulo personalizado com o atributo title & status field na grade do administrador.

Coleções de grade em 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>

Eu quero mostrar os dados que estão habilitados. Tem alguma opção para adicionar filtro padrão nas coleções de grade do administrador ?

EDITAR

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

Eu segui este link para criar uma grade administrativa no magento 2

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

DRAJI
fonte

Respostas:

12

Se você definir o layout da coleção de grade, poderá usar o atualizador para adicionar o filtro padrão.

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

e

<?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 Estender grade

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
fonte
Oi KAndy, Não está funcionando para mim. Você poderia me ajudar a resolver o problema?
Vigna S
5
Para quem encontrar esta resposta, observe que ela se aplica apenas a grades herdadas. Não grades baseadas em componentes de interface do usuário.
Andre Klang
Então, como podemos aplicar esse tipo de filtro à grade baseada em componentes de interface do usuário?
precisa saber é o seguinte
Para grade baseada em componente de interface do usuário , isso pode ser feito com a mesma abordagem como esta magento.stackexchange.com/a/178663/55259
Torrey
5

você precisa adicionar isso dentro da tag argumentos:

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

se seus argumentos estão contidos neste bloco

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

você precisa criar sua própria classe que se estende Magento\Backend\Block\Widget\Gridassim:

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

e modifique a tag de bloco acima para

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

se você já usa uma grade personalizada e não a padrão Magento\Backend\Block\Widget\Grid, não precisa criar a classe.
Você só precisa copiar o _constructmétodo de cima na sua classe.

Marius
fonte
Olá @Marius, Obrigado pela sua resposta. No método de construção, obtive o valor padrão do filtro. Mas a filtragem não está funcionando. Não obter todos os registros também
DRAJI 13/01
1
talvez você devesse adicionar mais código à pergunta para obter uma melhor visão geral.
Marius
Eu atualizei a minha pergunta com código de filtro que eu adicionei
draji
Ótimo. Vou dar uma nova olhada e voltar com um resultado.
Marius
Oi Marius, eu tentei isso, mas não está funcionando, você encontrou alguma solução?
Vigna S
0

aqui está a referência em devdocs:

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

Se você precisar de mais informações sobre isso - você pode criar uma solicitação pull ou um problema na página de documentos - basta clicar no link "Editar esta página no GitHub". Os documentos são atualizados e aprimorados constantemente.

EquinoxBlack
fonte
1
o link que você mencionou mostra como adicionar filtros em uma grade que usa os componentes da interface do usuário. Eu acho que a pergunta é sobre mudar uma grade que se estende Magento\Backend\Block\Widget\Grid. Mas eu posso estar errado.
Marius
Olá @EquinoxBlack Obrigado por sua resposta. Mas usando componente UI
draji
0

Depois de tentar muitos códigos que não funcionam, finalmente encontre uma maneira de não precisar de codificação - use a função de salvar visualizações personalizadas que pode salvar as configurações de filtro e coluna.

Etapas específicas

Após definir as configurações de filtro e coluna, clique no Default Viewbotão com o ícone de olho e clique em Save View As…para inserir um nome para a sua exibição. Em seguida, você pode clicar na visualização personalizada sempre que desejar obter a grade da maneira que desejar e salvar as visualizações personalizadas quantas desejar.

Você também pode voltar e usar o ícone de edição para renomeá-lo ou excluí-lo posteriormente, ou para retornar à exibição padrão.

Eu acho que essa é uma função muito boa no Magento 2 :)

insira a descrição da imagem aqui

Key Shang
fonte