Magento 2 and filtered collections
I have a collection of users and I want to create a backend grid to show only some user depending on a filter.
For example I want to show all the users in my table whith age greater than 18.
I created a new collection and i added my filter to _initSelect
method.
...
protected function _initSelect()
{
parent::_initSelect();
$this->addUsersFilter();
return $this;
}
...
public function addUsersFilter()
{
$this
->addFieldToFilter('age', ['gteq' => 18]);
return $this;
}
...
Bt my grid keeps showing me the whole table content regardless my filter.
Does anyone knows how to filter a grid directly from its source collection?
magento2 collection grid
add a comment |
I have a collection of users and I want to create a backend grid to show only some user depending on a filter.
For example I want to show all the users in my table whith age greater than 18.
I created a new collection and i added my filter to _initSelect
method.
...
protected function _initSelect()
{
parent::_initSelect();
$this->addUsersFilter();
return $this;
}
...
public function addUsersFilter()
{
$this
->addFieldToFilter('age', ['gteq' => 18]);
return $this;
}
...
Bt my grid keeps showing me the whole table content regardless my filter.
Does anyone knows how to filter a grid directly from its source collection?
magento2 collection grid
add a comment |
I have a collection of users and I want to create a backend grid to show only some user depending on a filter.
For example I want to show all the users in my table whith age greater than 18.
I created a new collection and i added my filter to _initSelect
method.
...
protected function _initSelect()
{
parent::_initSelect();
$this->addUsersFilter();
return $this;
}
...
public function addUsersFilter()
{
$this
->addFieldToFilter('age', ['gteq' => 18]);
return $this;
}
...
Bt my grid keeps showing me the whole table content regardless my filter.
Does anyone knows how to filter a grid directly from its source collection?
magento2 collection grid
I have a collection of users and I want to create a backend grid to show only some user depending on a filter.
For example I want to show all the users in my table whith age greater than 18.
I created a new collection and i added my filter to _initSelect
method.
...
protected function _initSelect()
{
parent::_initSelect();
$this->addUsersFilter();
return $this;
}
...
public function addUsersFilter()
{
$this
->addFieldToFilter('age', ['gteq' => 18]);
return $this;
}
...
Bt my grid keeps showing me the whole table content regardless my filter.
Does anyone knows how to filter a grid directly from its source collection?
magento2 collection grid
magento2 collection grid
asked Jul 11 '16 at 12:13
Phoenix128_RiccardoTPhoenix128_RiccardoT
5,2002928
5,2002928
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
Ok, I found it by myself. Posting here if it helps:
This kind of filter cannot be done at collection level, but only at data provider level.
So, if you have:
<virtualType name="MyModuleModelResourceModelGridItemsCollection"
type="MagentoFrameworkViewElementUiComponentDataProviderSearchResult">
<arguments>
<argument name="mainTable" xsi:type="string">my_table</argument>
<argument name="resourceModel"
xsi:type="string">MyModuleModelResourceModelItemsCollection</argument>
</arguments>
</virtualType>
You can just point to your custom data provider instead of inheriting from MagentoFrameworkViewElementUiComponentDataProviderSearchResult
.
Your XML becomes:
<virtualType name="MyModuleModelResourceModelGridItemsCollection"
type="MyModuleUiComponentDataProviderSearchResultItems">
<arguments>
<argument name="mainTable" xsi:type="string">my_table</argument>
<argument name="resourceModel"
xsi:type="string">MyModuleModelResourceModelItemsCollection</argument>
</arguments>
</virtualType>
Now we are referring to MyModuleUiComponentDataProviderSearchResultItems
instead of MagentoFrameworkViewElementUiComponentDataProviderSearchResult
.
Now we have to create our new class:
<?php
namespace MyModuleUiComponentDataProviderSearchResult;
class Items extends MagentoFrameworkViewElementUiComponentDataProviderSearchResult
{
protected function _initSelect()
{
parent::_initSelect();
$this->addMyCustomFilter();
return $this;
}
public function addMyCustomFilter()
{
$this
->addFieldToFilter('age', ['gteq' => 18])
return $this;
}
}
Hope it helps.
add a comment |
when I passing dynamic value from URL like:
$nameURL = $_SERVER["REQUEST_URI"];
... do something with $nameURL and get value: $name = "myname"
and code:
$this->addFieldToFilter('name', ['eq' => $name]); // not working
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "479"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f125159%2fmagento-2-and-filtered-collections%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Ok, I found it by myself. Posting here if it helps:
This kind of filter cannot be done at collection level, but only at data provider level.
So, if you have:
<virtualType name="MyModuleModelResourceModelGridItemsCollection"
type="MagentoFrameworkViewElementUiComponentDataProviderSearchResult">
<arguments>
<argument name="mainTable" xsi:type="string">my_table</argument>
<argument name="resourceModel"
xsi:type="string">MyModuleModelResourceModelItemsCollection</argument>
</arguments>
</virtualType>
You can just point to your custom data provider instead of inheriting from MagentoFrameworkViewElementUiComponentDataProviderSearchResult
.
Your XML becomes:
<virtualType name="MyModuleModelResourceModelGridItemsCollection"
type="MyModuleUiComponentDataProviderSearchResultItems">
<arguments>
<argument name="mainTable" xsi:type="string">my_table</argument>
<argument name="resourceModel"
xsi:type="string">MyModuleModelResourceModelItemsCollection</argument>
</arguments>
</virtualType>
Now we are referring to MyModuleUiComponentDataProviderSearchResultItems
instead of MagentoFrameworkViewElementUiComponentDataProviderSearchResult
.
Now we have to create our new class:
<?php
namespace MyModuleUiComponentDataProviderSearchResult;
class Items extends MagentoFrameworkViewElementUiComponentDataProviderSearchResult
{
protected function _initSelect()
{
parent::_initSelect();
$this->addMyCustomFilter();
return $this;
}
public function addMyCustomFilter()
{
$this
->addFieldToFilter('age', ['gteq' => 18])
return $this;
}
}
Hope it helps.
add a comment |
Ok, I found it by myself. Posting here if it helps:
This kind of filter cannot be done at collection level, but only at data provider level.
So, if you have:
<virtualType name="MyModuleModelResourceModelGridItemsCollection"
type="MagentoFrameworkViewElementUiComponentDataProviderSearchResult">
<arguments>
<argument name="mainTable" xsi:type="string">my_table</argument>
<argument name="resourceModel"
xsi:type="string">MyModuleModelResourceModelItemsCollection</argument>
</arguments>
</virtualType>
You can just point to your custom data provider instead of inheriting from MagentoFrameworkViewElementUiComponentDataProviderSearchResult
.
Your XML becomes:
<virtualType name="MyModuleModelResourceModelGridItemsCollection"
type="MyModuleUiComponentDataProviderSearchResultItems">
<arguments>
<argument name="mainTable" xsi:type="string">my_table</argument>
<argument name="resourceModel"
xsi:type="string">MyModuleModelResourceModelItemsCollection</argument>
</arguments>
</virtualType>
Now we are referring to MyModuleUiComponentDataProviderSearchResultItems
instead of MagentoFrameworkViewElementUiComponentDataProviderSearchResult
.
Now we have to create our new class:
<?php
namespace MyModuleUiComponentDataProviderSearchResult;
class Items extends MagentoFrameworkViewElementUiComponentDataProviderSearchResult
{
protected function _initSelect()
{
parent::_initSelect();
$this->addMyCustomFilter();
return $this;
}
public function addMyCustomFilter()
{
$this
->addFieldToFilter('age', ['gteq' => 18])
return $this;
}
}
Hope it helps.
add a comment |
Ok, I found it by myself. Posting here if it helps:
This kind of filter cannot be done at collection level, but only at data provider level.
So, if you have:
<virtualType name="MyModuleModelResourceModelGridItemsCollection"
type="MagentoFrameworkViewElementUiComponentDataProviderSearchResult">
<arguments>
<argument name="mainTable" xsi:type="string">my_table</argument>
<argument name="resourceModel"
xsi:type="string">MyModuleModelResourceModelItemsCollection</argument>
</arguments>
</virtualType>
You can just point to your custom data provider instead of inheriting from MagentoFrameworkViewElementUiComponentDataProviderSearchResult
.
Your XML becomes:
<virtualType name="MyModuleModelResourceModelGridItemsCollection"
type="MyModuleUiComponentDataProviderSearchResultItems">
<arguments>
<argument name="mainTable" xsi:type="string">my_table</argument>
<argument name="resourceModel"
xsi:type="string">MyModuleModelResourceModelItemsCollection</argument>
</arguments>
</virtualType>
Now we are referring to MyModuleUiComponentDataProviderSearchResultItems
instead of MagentoFrameworkViewElementUiComponentDataProviderSearchResult
.
Now we have to create our new class:
<?php
namespace MyModuleUiComponentDataProviderSearchResult;
class Items extends MagentoFrameworkViewElementUiComponentDataProviderSearchResult
{
protected function _initSelect()
{
parent::_initSelect();
$this->addMyCustomFilter();
return $this;
}
public function addMyCustomFilter()
{
$this
->addFieldToFilter('age', ['gteq' => 18])
return $this;
}
}
Hope it helps.
Ok, I found it by myself. Posting here if it helps:
This kind of filter cannot be done at collection level, but only at data provider level.
So, if you have:
<virtualType name="MyModuleModelResourceModelGridItemsCollection"
type="MagentoFrameworkViewElementUiComponentDataProviderSearchResult">
<arguments>
<argument name="mainTable" xsi:type="string">my_table</argument>
<argument name="resourceModel"
xsi:type="string">MyModuleModelResourceModelItemsCollection</argument>
</arguments>
</virtualType>
You can just point to your custom data provider instead of inheriting from MagentoFrameworkViewElementUiComponentDataProviderSearchResult
.
Your XML becomes:
<virtualType name="MyModuleModelResourceModelGridItemsCollection"
type="MyModuleUiComponentDataProviderSearchResultItems">
<arguments>
<argument name="mainTable" xsi:type="string">my_table</argument>
<argument name="resourceModel"
xsi:type="string">MyModuleModelResourceModelItemsCollection</argument>
</arguments>
</virtualType>
Now we are referring to MyModuleUiComponentDataProviderSearchResultItems
instead of MagentoFrameworkViewElementUiComponentDataProviderSearchResult
.
Now we have to create our new class:
<?php
namespace MyModuleUiComponentDataProviderSearchResult;
class Items extends MagentoFrameworkViewElementUiComponentDataProviderSearchResult
{
protected function _initSelect()
{
parent::_initSelect();
$this->addMyCustomFilter();
return $this;
}
public function addMyCustomFilter()
{
$this
->addFieldToFilter('age', ['gteq' => 18])
return $this;
}
}
Hope it helps.
answered Jul 11 '16 at 13:11
Phoenix128_RiccardoTPhoenix128_RiccardoT
5,2002928
5,2002928
add a comment |
add a comment |
when I passing dynamic value from URL like:
$nameURL = $_SERVER["REQUEST_URI"];
... do something with $nameURL and get value: $name = "myname"
and code:
$this->addFieldToFilter('name', ['eq' => $name]); // not working
add a comment |
when I passing dynamic value from URL like:
$nameURL = $_SERVER["REQUEST_URI"];
... do something with $nameURL and get value: $name = "myname"
and code:
$this->addFieldToFilter('name', ['eq' => $name]); // not working
add a comment |
when I passing dynamic value from URL like:
$nameURL = $_SERVER["REQUEST_URI"];
... do something with $nameURL and get value: $name = "myname"
and code:
$this->addFieldToFilter('name', ['eq' => $name]); // not working
when I passing dynamic value from URL like:
$nameURL = $_SERVER["REQUEST_URI"];
... do something with $nameURL and get value: $name = "myname"
and code:
$this->addFieldToFilter('name', ['eq' => $name]); // not working
answered 24 mins ago
Yuen Fie QiángYuen Fie Qiáng
11
11
add a comment |
add a comment |
Thanks for contributing an answer to Magento Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f125159%2fmagento-2-and-filtered-collections%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown