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 />";
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top