Chcę utworzyć link do niestandardowej siatki u mojego administratora z predefiniowanymi filtrami. Siatka jest wykonana za pomocą składnika listingu interfejsu użytkownika (XML) i ma kolumnę o nazwie, form_id
która jest skonfigurowana w następujący sposób:
<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>
Siatka działa dobrze. Mogę zastosować filtr i wszystko działa dobrze. Siatka jest ładnie aktualizowana przez żądanie XHR.
Jednak ... Chcę mieć możliwość zdefiniowania wartości filtrów w pewnym momencie. Na przykład chcę móc otworzyć siatkę, gdy jest filtrowana według ID = 3.
Próbowałem już załadować stronę z tymi samymi parametrami adresu URL, co żądanie XHR, a także po prostu dodać tylko wymagane parametry:
?namespace=form_response_listing&search=&filters[placeholder]=true&filters[form_id][from]=3&filters[form_id][to]=3&paging[pageSize]=20&paging[current]=1
Jak również:
?filters[form_id][from]=3&filters[form_id][to]=3
Oba bez powodzenia. Jak mogę wstępnie wypełnić filtry za pomocą adresu URL?
Edytować:
Nie jestem pewien, czy jest to duplikat drugiego pytania (jak wspomniano w komentarzach poniżej). W moim przypadku używam typu wirtualnego jako kolekcji dla mojej siatki:
<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>
Więc nie chodzi o to, że mam fizyczną klasę Block dla mojego widgetu grid, jest ona czysto utworzona za pomocą komponentu interfejsu użytkownika z listą XML.
Niemniej jednak sprawdzę, czy pytanie, o którym mowa, pomoże w moim przypadku użycia.
prepareColumns
metody.Odpowiedzi:
Oto, czego do tej pory się dowiedziałem.
To nie jest kompletne, ale może poprowadzić Cię właściwą ścieżką.
Przeprowadziłem testy, modyfikując komponent interfejsu użytkownika z listą stron cms.
Dodałem to
w
cms_page_listing.xml
środku węzła źródła danych poufnych danych / config argument. Więc teraz wygląda to takTo pozwala mi zadzwonić na adres URL
ROOT/admin/cms/page/index/key/<form_key_here>/?page_id=2
.I widzę tylko stronę o identyfikatorze 2.
Ale to nie działa dla filtrów zakresu i wartość filtru nie jest wypełniona. Nadal jest wyświetlana jako pusta.
Oto dlaczego jest to możliwe.
Klasa dataProvider dla stron cms to
Magento\Cms\Ui\Component\DataProvider
.Ten się rozszerza
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider
.Ten ostatni zawiera chronioną metodę o nazwie
prepareUpdateUrl
W tym celu należy sprawdzić w konfiguracji komponentu interfejsu użytkownika, czy istnieje element o nazwie
filter_url_params
. Jeśli tak, pobiera wszystkie zawarte w nim wartości i sprawdza żądanie wartości zgodnych z definicją wfilter_url_params
.Ale domyślnie działa tylko z
eq
.To, co możesz spróbować, to mieć niestandardowe źródło danych dla komponentu, w którym przepisujesz metodę
prepareUpdateUrl
i sprawiasz, że bierze ona pod uwagę wszystkie potrzebne zmienne żądania i może dodać do niej stronicowanie i filtrowanie zakresu.Uwaga dodatkowa: To bardzo interesujące pytanie. Jestem pewien, że wiele osób będzie tego potrzebować w przyszłości.
źródło
ROOT/admin/cms/page/index/page_id/2/key/<form_key_here>
, ponieważ używam go$this->urlBuilder->getUrl(static::URL_PATH,[ 'page_id' => $item['id']])
w UiCompnent / Listing / Column