Quiero crear un enlace a una cuadrícula personalizada en mi administrador con filtros predefinidos. La cuadrícula está hecha con un Componente de listado de UI (XML) y tiene una columna llamada form_id
que se configura así:
<column name="form_id">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">textRange</item>
<item name="label" xsi:type="string" translate="true">Form id</item>
</item>
</argument>
</column>
La cuadrícula funciona bien. Puedo aplicar el filtro y todo funciona bien. La cuadrícula se actualiza muy bien con una solicitud XHR.
Sin embargo ... Quiero poder tener un valor de filtro predefinido en algún momento. Por ejemplo, quiero poder abrir la cuadrícula cuando se filtra en ID = 3.
Así que ya intenté cargar la página con los mismos parámetros de URL que la solicitud XHR, y simplemente agregué los únicos parámetros necesarios:
?namespace=form_response_listing&search=&filters[placeholder]=true&filters[form_id][from]=3&filters[form_id][to]=3&paging[pageSize]=20&paging[current]=1
Tanto como:
?filters[form_id][from]=3&filters[form_id][to]=3
Ambos sin éxito. Entonces, ¿cómo puedo rellenar previamente los filtros usando la URL?
Editar:
No estoy seguro de si esto es un duplicado de la otra pregunta (como se menciona en los comentarios a continuación). En mi caso, estoy usando un tipo virtual como colección para mi grilla:
<virtualType name="Vendor\Module\Model\ResourceModel\Response\Grid\Collection"
type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
<arguments>
<argument name="mainTable" xsi:type="string">vendormodule_form_response</argument>
<argument name="resourceModel" xsi:type="string">Vendor\Module\Model\ResourceModel\Response</argument>
</arguments>
</virtualType>
Entonces, no es que tenga una clase física de Bloque para mi widget de cuadrícula, está puramente creado con un XML de listado de componentes de la interfaz de usuario.
Sin embargo, comprobaré de todos modos si la pregunta mencionada ayudará a mi caso de uso.
prepareColumns
método.Respuestas:
Esto es lo que descubrí hasta ahora.
Esto no está completo, pero puede llevarlo por el camino correcto.
Realicé mis pruebas modificando la página cms que enumera el componente ui.
Agregué esto
en
cms_page_listing.xml
el interior del nodo dataSource dentro de la / argumento de datos de configuración. Entonces ahora se ve asíEsto me permite llamar a la url
ROOT/admin/cms/page/index/key/<form_key_here>/?page_id=2
.Y solo veo la página con la identificación 2.
Pero no funciona para los filtros de rango y el valor del filtro no se completa. Todavía se muestra en blanco.
Ahora aquí es por qué esto es posible.
La clase dataProvider para páginas cms es
Magento\Cms\Ui\Component\DataProvider
.Este se extiende
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider
.Este último contiene un método protegido llamado
prepareUpdateUrl
Lo que esto hace es verificar en la configuración del componente ui si hay un elemento llamado
filter_url_params
. Si lo hay, toma todos los valores dentro de él y verifica la solicitud de valores que coincidan con lo que se define enfilter_url_params
.Pero por defecto solo funciona con
eq
.Lo que puede intentar es tener una fuente de datos personalizada para su componente donde reescriba el método
prepareUpdateUrl
y haga que tenga en cuenta todas las variables de solicitud que necesita y tal vez agregue paginación y filtrado de rango.Nota al margen: esta es una pregunta muy interesante. Estoy seguro de que mucha gente necesitará esto en el futuro.
fuente
ROOT/admin/cms/page/index/page_id/2/key/<form_key_here>
, porque estoy usando$this->urlBuilder->getUrl(static::URL_PATH,[ 'page_id' => $item['id']])
en UiCompnent / Listing / Column