Pergunta

Tenho trabalhado em meu próprio tema a partir do RWD padrão em 1.9.2.1.

Gostaria de limitar os produtos relacionados para mostrar apenas 8 produtos em vez de todos os 139 que tenho atualmente para um único produto.

Além disso, gostaria de escolher aleatoriamente 8 de todos os produtos relacionados.

Estou ciente de que poderia simplesmente adicionar uma pausa no loop para que, quando ele iterasse 8 vezes, ele parasse, mas acredito que isso pode ser um desperdício de recursos.

Concluí que o código abaixo é responsável por criar a coleção de produtos relacionados.Então, como eu alteraria isso da maneira correta para limitar a 8 produtos e escolher aleatoriamente?

    $product = Mage::registry('product');
        /* @var $product Mage_Catalog_Model_Product */

        $this->_itemCollection = $product->getRelatedProductCollection()
            ->addAttributeToSelect('required_options')
            ->setPositionOrder()
            ->addStoreFilter()
        ;

        if (Mage::helper('catalog')->isModuleEnabled('Mage_Checkout')) {
            Mage::getResourceSingleton('checkout/cart')->addExcludeProductFilter($this->_itemCollection,
                Mage::getSingleton('checkout/session')->getQuoteId()
            );
            $this->_addProductAttributesAndPrices($this->_itemCollection);
        }
//        Mage::getSingleton('catalog/product_status')->addSaleableFilterToCollection($this->_itemCollection);
        Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($this->_itemCollection);

        $this->_itemCollection->load();

        foreach ($this->_itemCollection as $product) {
            $product->setDoNotUseCategoryId(true);
        }

        return $this;
Foi útil?

Solução

Em retrospectiva, esta foi uma questão bastante fácil de resolver:Adicionando as duas linhas abaixo na função _prepareData() acima do carregamento itemCollection.

No entanto, embora eu ainda seja novo no mundo magento, sei que você nunca deve editar arquivos principais e, em vez disso, deve estender o módulo que deseja alterar.Mas, infelizmente, isso está acima do meu conhecimento, então se alguém pudesse incorporar minha resposta de forma que fosse considerada correta, eu agradeceria.

$this->_itemCollection->getSelect()->order('rand()');
$this->_itemCollection->setPage(1, 8);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top