Produtos relacionados com um mesmo atributo
-
12-12-2019 - |
Pergunta
Eu estou tentando fazer a mesma coisa no Magento CE 1.9.1.0 .Basicamente eu quero editar os produtos relacionados bloco para mostrar todos os produtos que têm o mesmo valor para um determinado atributo.Basicamente, eu tenho um atributo chamado família e quando você ver o produto abc, que pertence ao atributo de família "Pepsi" quero exibir todos os outros produtos que têm um valor para o atributo de família 'pepsi'
Então, eu estou alterando o arquivo app/design/frontend/MY_THEME/default/template/catalog/product/list/relacionados.phtml
A primeira coisa que eu faço neste arquivo é obter o valor do atributo de família, fazendo o abaixo
//get the name of the family that the product being viewed is a part of
$itemcollectionname = Mage::getModel('catalog/product')->load($_product->getId())->getAttributeText('family');
Então eu tentei usar o código no post acima como
$rcollection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes()) //add some attribtues to select
->addAttributeToFilter('family', array('eq'=>$itemcollectionname);//filter products with the same family
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($rcollection); //only active products
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($rcollection);//only visible products
$rcollection->setPage(1,5);//limit to 5 products
echo "$rcollection<br />";
Solução
Primeiro de tudo você precisa definir configurações de Atributo ", Utilizada na lista de produtos" para Sim.
Em seguida, você pode simplesmente fazer:
Evitar o duplo carregamento do produto, ele já está carregado.
//$itemcollectionname = Mage::getModel('catalog/product')->load($_product->getId())->getAttributeText('family');
$itemcollectionname = $_product->getAttributeText('family');
Ou carregar uma nova coleção como:
$itemcollectionname = Mage::getResourceModel('catalog/product_collection')->addAttributeToSelect('*');
foreach($itemcollectionname as $product){
echo $product->getFamily();
//OR
echo $product->getAttributeText('family');
}
Então, se você deseja filtrar por família, você vai precisar de um valor para filtrar por:
Exemplo:
$itemcollectionname = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter('family', 'Pants');
foreach($itemcollectionname as $product){
echo $product->getId();
}
Outras dicas
Em primeiro lugar obter a id de etiqueta e, em seguida, executar addField filtrar a coleção
$productModel = Mage::getModel('catalog/product');
$attr = $productModel->getResource()->getAttribute("manufacturer");
if ($attr->usesSource()) {
$manufacturer_id = $attr->getSource()->getOptionId("Nike");
}
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToFilter('manufacturer',$manufacturer_id);
Espero que isso irá ajudá-lo.