Como randomizar e limitar produtos relacionados?
-
28-09-2020 - |
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;
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);