Para agregar un filtro predeterminado a la cuadrícula en Magento2?

12

He creado un módulo personalizado con el atributo de campo de título y estado en la cuadrícula de administración.

Colecciones de cuadrícula en 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>

Quiero mostrar los datos que están habilitados. ¿Tiene alguna opción para agregar un filtro predeterminado en las colecciones de la cuadrícula de administración ?

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>

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

He seguido este enlace para crear una grilla de administración en magento 2

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

DRAJI
fuente

Respuestas:

12

Si define el diseño pensado de la colección de cuadrículas, puede usar el actualizador para agregar el filtro predeterminado.

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

y

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

o extender el bloque de cuadrícula

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
fuente
Hola KAndy, no está funcionando para mí. ¿Podrías ayudarme a solucionarlo?
Vigna S
55
Para cualquiera que encuentre esta respuesta, tenga en cuenta que solo se aplica a las cuadrículas heredadas. No cuadrículas basadas en componentes UI.
Andre Klang
Entonces, ¿cómo podemos aplicar este tipo de filtros a la cuadrícula basada en componentes ui?
Knight017
Para la cuadrícula basada en componentes UI , se puede hacer con el mismo enfoque como este magento.stackexchange.com/a/178663/55259
Torrey
5

necesita agregar esto dentro de la etiqueta de argumentos:

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

si sus argumentos están contenidos en este bloque

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

necesitas crear tu propia clase que se extienda Magento\Backend\Block\Widget\Gridasí:

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

y modifique la etiqueta de bloque anterior para

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

si ya usa una cuadrícula personalizada y no la predeterminada Magento\Backend\Block\Widget\Grid, no necesita crear la clase.
Solo necesita copiar el _constructmétodo de arriba en su clase.

Marius
fuente
Hola @ Mario, gracias por tu respuesta. En el método de construcción obtuve el valor de filtro predeterminado. Pero el filtrado no funciona. No todos los registros también
DRAJI
1
tal vez debería agregar más código que tenga a la pregunta para obtener una mejor visión general.
Marius
He actualizado mi pregunta con el código de filtro que agregué
DRAJI
Excelente. Tomaré un nuevo aspecto y volveré con un resultado.
Marius
Hola Marius, intenté esto pero no funciona, ¿has encontrado alguna solución?
Vigna S
0

Aquí está la referencia sobre devdocs:

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

Si necesita más información sobre eso, puede crear una solicitud de extracción o un problema a través de la página de documentos, simplemente haga clic en el enlace "Editar esta página en GitHub". Los documentos se actualizan y mejoran constantemente.

EquinoccioNegro
fuente
1
el enlace que mencionó muestra cómo agregar filtros en una cuadrícula que usa los componentes de la interfaz de usuario. Creo que la pregunta es sobre cambiar una cuadrícula que se extiende Magento\Backend\Block\Widget\Grid. Pero puedo estar equivocado.
Marius
Hola @EquinoxBlack Gracias por tu respuesta. Pero utilizando el componente UI
DRAJI
0

Después de probar muchos códigos que no funcionan, finalmente encuentre una manera que no necesite codificación : utilice la función de guardar vistas personalizadas que podría guardar la configuración de filtro y columna.

Pasos específicos

Después de configurar el filtro y la configuración de la columna, haga clic en el Default Viewbotón con el icono del ojo, luego haga clic Save View As…para ingresar un nombre para su vista. Luego, puede hacer clic en la vista personalizada siempre que desee obtener la cuadrícula de la manera que desee, y puede guardar las vistas personalizadas tantas como desee.

También puede volver y usar el icono de edición para cambiarle el nombre o eliminarlo más tarde, o para volver a la vista predeterminada.

Creo que esta es una muy buena función en Magento 2 :)

ingrese la descripción de la imagen aquí

Key Shang
fuente