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 with multiple 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
0

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 :)

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.