我正在尝试创建一个块,显示 Magento 1.7.0.2 网站上的 5 个最畅销产品、5 个最受欢迎的产品和 5 个最大的折扣产品。
该块在 local.xml 中定义如下:
<reference name="content">
<block type="core/template" name="movies_block" template="catalog/product-block.phtml" before="-">
<action method="setData"><name>category_id</name><value>5</value></action>
</block>
</reference>
(你给它传递一个类别 ID,它的想法是它可以在我的主题中快速重复用于我选择的类别)
我已经编写并测试了用于显示畅销商品和观看次数最多的代码,但我正在努力寻找一种方法来有效地对折扣最多的前 5 名进行排序。我将折扣定义为“价格”和“特价”之间的百分比差异。
我的代码如下:
$visibility = array(
Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
);
$catNum = $this->getCategoryId(); // grab cat id from xml
$category = Mage::getModel('catalog/category')->load($catNum);
// load products from $category
$_productCollection = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter('visibility', $visibility)
->addCategoryFilter($category);
$saleProducts = array();
$i=0;
foreach($_productCollection as $product):
if($product->getSpecialPrice()): // if a product has a special price
/* calculate discount as percentage and add it to $product array of each */
$product['discount'] = $product->getSpecialPrice()/$product->getPrice()*100;
$saleProducts[$i] = $product; // put discounted products into separate array
$i++;
endif;
endforeach;
这会留下一个数组 $saleProducts,其中包含具有“special_price”的产品。但是,我只想要打折最多的前 5 个($product['discount'] 中的最高值)。
我一直在尝试使用以下方法对数组进行排序:
function cmp($a, $b) {
return ($a['discount'] - $b['discount']);
}
usort($saleProducts, "cmp");
但是,只要我在代码中添加任何带有“功能”的内容,整个块就不再显示......即使我只是写:
function sortByDiscount($a, $b) {};
.phtml 文件中的任何位置,Magento 是否阻止我创建函数?还有其他人解决了这个特殊问题吗?我感觉我的方式可能会很慢,特别是因为我之前在同一个 .phtml 文件中使用了其他带有过滤器的产品集合,并且这个块需要处理多达 20,000 个产品的类别。
欢迎任何建议。