filter a product collection by attribute and tag
How can I filter a collection by both an attribute and by a tag?
I can filter a product collection by doing:
Mage::app()->setCurrentStore( $storeId );
$collection = Mage::getModel( 'catalog/product' );
/** @var Mage_Catalog_Model_Resource_Product_Collection $collection */
$collection = $product->getCollection();
$collection->addAttributeToSelect( '*' );
$collection->addAttributeToFilter( 'attribute_set_id', $attribute_set_id );
And I can get the tag ID by doing:
$tag = Mage::getModel('tag/tag')->loadByName($tag_name);
I've found that you can do like this to filter by tag:
$products = Mage::getResourceModel('tag/product_collection')
->addAttributeToSelect( '*' ) //
->addTagFilter($tag->getId()) //filter by the tag object
->addStoreFilter(Mage::app()->getStore()->getId());
But I'd like to combine the first type of filter with the second, as to be able to filter both by attribute and optionally by tag.
collection ce-1.8.1.0 tags
add a comment |
How can I filter a collection by both an attribute and by a tag?
I can filter a product collection by doing:
Mage::app()->setCurrentStore( $storeId );
$collection = Mage::getModel( 'catalog/product' );
/** @var Mage_Catalog_Model_Resource_Product_Collection $collection */
$collection = $product->getCollection();
$collection->addAttributeToSelect( '*' );
$collection->addAttributeToFilter( 'attribute_set_id', $attribute_set_id );
And I can get the tag ID by doing:
$tag = Mage::getModel('tag/tag')->loadByName($tag_name);
I've found that you can do like this to filter by tag:
$products = Mage::getResourceModel('tag/product_collection')
->addAttributeToSelect( '*' ) //
->addTagFilter($tag->getId()) //filter by the tag object
->addStoreFilter(Mage::app()->getStore()->getId());
But I'd like to combine the first type of filter with the second, as to be able to filter both by attribute and optionally by tag.
collection ce-1.8.1.0 tags
add a comment |
How can I filter a collection by both an attribute and by a tag?
I can filter a product collection by doing:
Mage::app()->setCurrentStore( $storeId );
$collection = Mage::getModel( 'catalog/product' );
/** @var Mage_Catalog_Model_Resource_Product_Collection $collection */
$collection = $product->getCollection();
$collection->addAttributeToSelect( '*' );
$collection->addAttributeToFilter( 'attribute_set_id', $attribute_set_id );
And I can get the tag ID by doing:
$tag = Mage::getModel('tag/tag')->loadByName($tag_name);
I've found that you can do like this to filter by tag:
$products = Mage::getResourceModel('tag/product_collection')
->addAttributeToSelect( '*' ) //
->addTagFilter($tag->getId()) //filter by the tag object
->addStoreFilter(Mage::app()->getStore()->getId());
But I'd like to combine the first type of filter with the second, as to be able to filter both by attribute and optionally by tag.
collection ce-1.8.1.0 tags
How can I filter a collection by both an attribute and by a tag?
I can filter a product collection by doing:
Mage::app()->setCurrentStore( $storeId );
$collection = Mage::getModel( 'catalog/product' );
/** @var Mage_Catalog_Model_Resource_Product_Collection $collection */
$collection = $product->getCollection();
$collection->addAttributeToSelect( '*' );
$collection->addAttributeToFilter( 'attribute_set_id', $attribute_set_id );
And I can get the tag ID by doing:
$tag = Mage::getModel('tag/tag')->loadByName($tag_name);
I've found that you can do like this to filter by tag:
$products = Mage::getResourceModel('tag/product_collection')
->addAttributeToSelect( '*' ) //
->addTagFilter($tag->getId()) //filter by the tag object
->addStoreFilter(Mage::app()->getStore()->getId());
But I'd like to combine the first type of filter with the second, as to be able to filter both by attribute and optionally by tag.
collection ce-1.8.1.0 tags
collection ce-1.8.1.0 tags
edited 32 mins ago
Teja Bhagavan Kollepara
2,94841847
2,94841847
asked Nov 26 '15 at 15:20
yiviyivi
1368
1368
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Try this:
$collection is your product collection.
$collection->joinTable(
array('tag_relation' => 'tag/relation'), 'product_id = entity_id',
array('tag_relation_id' => 'tag_relation_id', 'tag_id' => 'tag_id'), null, 'inner'
);
$collection->joinTable(
array('tag' => 'tag/tag'), 'tag_id = tag_id', array('tag_name' => 'name'), null, 'inner'
);
$collection->getSelect()->where("tag.name {$operator} (?)", $tagString);
$collection->getSelect()->where("tag.status = ?", Mage_Tag_Model_Tag::STATUS_APPROVED);
In the code above $operator would be your usual SQL operators (<,>,=,!= etc)
$tagString will be the value of the tag you are interested in linking.
I use this in my Dynamic Category Products extension to allow rules that bring in products based on tags.
Great. A pity magento ORM doesn't allow to do this directly, without having to write your own joins, but nice solution nonetheless.
– yivi
Nov 27 '15 at 12:49
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');
});
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%2f91730%2ffilter-a-product-collection-by-attribute-and-tag%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Try this:
$collection is your product collection.
$collection->joinTable(
array('tag_relation' => 'tag/relation'), 'product_id = entity_id',
array('tag_relation_id' => 'tag_relation_id', 'tag_id' => 'tag_id'), null, 'inner'
);
$collection->joinTable(
array('tag' => 'tag/tag'), 'tag_id = tag_id', array('tag_name' => 'name'), null, 'inner'
);
$collection->getSelect()->where("tag.name {$operator} (?)", $tagString);
$collection->getSelect()->where("tag.status = ?", Mage_Tag_Model_Tag::STATUS_APPROVED);
In the code above $operator would be your usual SQL operators (<,>,=,!= etc)
$tagString will be the value of the tag you are interested in linking.
I use this in my Dynamic Category Products extension to allow rules that bring in products based on tags.
Great. A pity magento ORM doesn't allow to do this directly, without having to write your own joins, but nice solution nonetheless.
– yivi
Nov 27 '15 at 12:49
add a comment |
Try this:
$collection is your product collection.
$collection->joinTable(
array('tag_relation' => 'tag/relation'), 'product_id = entity_id',
array('tag_relation_id' => 'tag_relation_id', 'tag_id' => 'tag_id'), null, 'inner'
);
$collection->joinTable(
array('tag' => 'tag/tag'), 'tag_id = tag_id', array('tag_name' => 'name'), null, 'inner'
);
$collection->getSelect()->where("tag.name {$operator} (?)", $tagString);
$collection->getSelect()->where("tag.status = ?", Mage_Tag_Model_Tag::STATUS_APPROVED);
In the code above $operator would be your usual SQL operators (<,>,=,!= etc)
$tagString will be the value of the tag you are interested in linking.
I use this in my Dynamic Category Products extension to allow rules that bring in products based on tags.
Great. A pity magento ORM doesn't allow to do this directly, without having to write your own joins, but nice solution nonetheless.
– yivi
Nov 27 '15 at 12:49
add a comment |
Try this:
$collection is your product collection.
$collection->joinTable(
array('tag_relation' => 'tag/relation'), 'product_id = entity_id',
array('tag_relation_id' => 'tag_relation_id', 'tag_id' => 'tag_id'), null, 'inner'
);
$collection->joinTable(
array('tag' => 'tag/tag'), 'tag_id = tag_id', array('tag_name' => 'name'), null, 'inner'
);
$collection->getSelect()->where("tag.name {$operator} (?)", $tagString);
$collection->getSelect()->where("tag.status = ?", Mage_Tag_Model_Tag::STATUS_APPROVED);
In the code above $operator would be your usual SQL operators (<,>,=,!= etc)
$tagString will be the value of the tag you are interested in linking.
I use this in my Dynamic Category Products extension to allow rules that bring in products based on tags.
Try this:
$collection is your product collection.
$collection->joinTable(
array('tag_relation' => 'tag/relation'), 'product_id = entity_id',
array('tag_relation_id' => 'tag_relation_id', 'tag_id' => 'tag_id'), null, 'inner'
);
$collection->joinTable(
array('tag' => 'tag/tag'), 'tag_id = tag_id', array('tag_name' => 'name'), null, 'inner'
);
$collection->getSelect()->where("tag.name {$operator} (?)", $tagString);
$collection->getSelect()->where("tag.status = ?", Mage_Tag_Model_Tag::STATUS_APPROVED);
In the code above $operator would be your usual SQL operators (<,>,=,!= etc)
$tagString will be the value of the tag you are interested in linking.
I use this in my Dynamic Category Products extension to allow rules that bring in products based on tags.
edited Nov 27 '15 at 1:32
answered Nov 26 '15 at 15:49
ProxiBlueProxiBlue
8,70632653
8,70632653
Great. A pity magento ORM doesn't allow to do this directly, without having to write your own joins, but nice solution nonetheless.
– yivi
Nov 27 '15 at 12:49
add a comment |
Great. A pity magento ORM doesn't allow to do this directly, without having to write your own joins, but nice solution nonetheless.
– yivi
Nov 27 '15 at 12:49
Great. A pity magento ORM doesn't allow to do this directly, without having to write your own joins, but nice solution nonetheless.
– yivi
Nov 27 '15 at 12:49
Great. A pity magento ORM doesn't allow to do this directly, without having to write your own joins, but nice solution nonetheless.
– yivi
Nov 27 '15 at 12:49
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');
});
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%2f91730%2ffilter-a-product-collection-by-attribute-and-tag%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');
});
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');
});
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');
});
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