Quero criar um link para uma grade personalizada no meu administrador com filtros predefinidos. A grade é feita com um XML (Componente de listagem da interface do usuário) e possui uma coluna chamada form_id
que é configurada da seguinte maneira:
<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>
A grade funciona muito bem. Eu posso aplicar o filtro e tudo funciona bem. A grade é bem atualizada com uma solicitação XHR.
No entanto ... eu quero poder ter um valor de filtros predefinido em algum momento. Por exemplo, quero poder abrir a grade quando estiver filtrada no ID = 3.
Então, eu já tentei carregar a página com os mesmos parâmetros de URL que a solicitação XHR, além de simplesmente adicionar os únicos parâmetros necessários:
?namespace=form_response_listing&search=&filters[placeholder]=true&filters[form_id][from]=3&filters[form_id][to]=3&paging[pageSize]=20&paging[current]=1
Assim como:
?filters[form_id][from]=3&filters[form_id][to]=3
Ambos sem sucesso. Então, como posso preencher previamente os filtros usando o URL?
Editar:
Não tenho certeza se essa é uma duplicata da outra pergunta (conforme mencionado nos comentários abaixo). No meu caso, estou usando um tipo virtual como coleção para minha grade:
<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>
Portanto, não é que eu tenha uma classe Block física para o meu widget de grade, ela foi criada puramente com um XML da lista de Componentes da UI.
No entanto, vou verificar de qualquer maneira se a pergunta referida ajudará meu caso de uso.
prepareColumns
método.Respostas:
Aqui está o que eu descobri até agora.
Isso não está completo, mas pode levá-lo ao caminho certo.
Conduzi meus testes modificando o componente da interface do usuário da lista de páginas cms.
Eu adicionei isso
no
cms_page_listing.xml
interior do nó dataSource dentro da data / argumento de configuração. Então agora parece com issoIsso permite que eu chame o URL
ROOT/admin/cms/page/index/key/<form_key_here>/?page_id=2
.E vejo apenas a página com o ID 2.
Mas não funciona para filtros de intervalo e o valor do filtro não é preenchido. Ainda é exibido em branco.
Agora, aqui está o porquê disso é possível.
A classe dataProvider para páginas cms é
Magento\Cms\Ui\Component\DataProvider
.Este se estende
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider
.Este último contém um método protegido chamado
prepareUpdateUrl
O que isso faz é verificar a configuração do componente da interface do usuário se houver um elemento chamado
filter_url_params
. Se houver, ele pega todos os valores dentro dele e verifica a solicitação de valores correspondentes ao definido emfilter_url_params
.Mas, por padrão, ele funciona apenas com
eq
.O que você pode tentar é ter uma fonte de dados personalizada para o seu componente, onde você reescreve o método
prepareUpdateUrl
e leva em consideração todas as variáveis de solicitação necessárias e talvez adicione paginação a ele e filtragem de intervalo.Nota lateral: Esta é uma pergunta muito interessante. Tenho certeza que muitas pessoas precisarão disso no futuro.
fonte
ROOT/admin/cms/page/index/page_id/2/key/<form_key_here>
, porque eu estou usando$this->urlBuilder->getUrl(static::URL_PATH,[ 'page_id' => $item['id']])
no UiCompnent / Listing / Column