I am currently making my own theme for a site in magento 1.9.2.4 and would like to limit the number of related products shown for a given product to a random 5.
in app -> code ->core->mage->core->block->product->list->related.php:
protected function _prepareData()
{
$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->getSelect()->order('rand()');
$this->_itemCollection->setPage(1, 5);
$this->_itemCollection->load();
foreach ($this->_itemCollection as $product) {
$product->setDoNotUseCategoryId(true);
}
return $this;
}I simply edited this function to have the two lines above the item collection load:
$this->_itemCollection->getSelect()->order('rand()');
$this->_itemCollection->setPage(1, 5);This successfully does what I am after, but one editing core files is a big no, and order('rand()'); is very resource draining and negative impact on performance, due to it's need to create a tmp table.
So, what I was wondering is if anyone could help me to create a solution that does not require core files edit and a more performance efficient solution.
It works! For the moment what I did is put it under local in the mean time.