2

In this example

<argument name="data" xsi:type="array">
    <item name="config" xsi:type="array">
        <item name="update_url" xsi:type="url" path="mui/index/render"/>
        <item name="filter_url_params" xsi:type="array">
            <item name="status" xsi:type="string">*</item>
        </item>
    </item>
</argument>

How to filter uicomponent grid with multiple url param values ? Like 1,2 not all the values

  • try to add in components xml file <filterUrlParams> <param name="custom_value">*</param> </filterUrlParams> – Vishnunath Jun 18 '18 at 16:39
1

If you have a requirement as load an admin grid with pre-defined multiple filter values like below:

<argument name="data" xsi:type="array">
    <item name="config" xsi:type="array">
        <item name="update_url" xsi:type="url" path="mui/index/render"/>
        <item name="filter_url_params" xsi:type="array">
            <item name="status" xsi:type="string">1,2</item>
        </item>
    </item>
</argument>

Then you can go in the dataprovider class of the uicomponent grid and make below changes(add below prepareUpdateUrl function code):

protected function prepareUpdateUrl() {
    if (!isset($this->data['config']['filter_url_params'])) {
        return;
    }
    foreach ($this->data['config']['filter_url_params'] as $paramName => $paramValue) {
        if ('*' == $paramValue) {
            $paramValue = $this->request->getParam($paramName);
        }
        if ($paramValue) {
            $this->data['config']['update_url'] = sprintf(
                    '%s%s/%s', $this->data['config']['update_url'], $paramName, $paramValue
            );
            if ($paramName == 'status') {
                $paramValue = explode(',', $paramValue);
                $this->addFilter(
                        $this->filterBuilder->setField($paramName)->setValue($paramValue)->setConditionType('in')->create()
                );
            } else {
                $this->addFilter(
                        $this->filterBuilder->setField($paramName)->setValue($paramValue)->setConditionType('eq')->create()
                );
            }
        }
    }
}

In above code, I am checking paramName as if ($paramName == 'status') then explode this paramValue as $paramValue = explode(',', $paramValue); and adding a new filter as below:

$this->addFilter($this->filterBuilder->setField($paramName)->setValue($paramValue)->setConditionType('in')->create());

And changing the filter condition from eq to in. This solution is very well tested and working live in one of my module, so let me know if you face any issue. Thanks :)

| improve this answer | |
  • Where to add prepareUpdateUrl() function? – Dhaduk Mitesh Dec 24 '19 at 6:51
  • add in your dataprovider class of the uicomponent grid, if you are using default one in the uicomponent grid, then create your own dataprovider by extending the default one and extend the prepareUpdateUrl function ... – Ashish Raj Dec 24 '19 at 9:11
  • 1
    Can't believe this answer didn't have any votes. It works perfectly. – Geat Jun 17 at 19:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.