我正在試圖創建一個塊,其中顯示了Magento 1.7上的5個暢銷產品,5個最受歡迎的產品和5個最大折扣產品。 0.2網站。試圖在Magento .phtml塊中對摺扣產品進行分類,添加任何功能都會禁用該塊
塊被定義爲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種產品的類別。
歡迎任何建議。僅從PHP 5.3支持
你有什麼PHP版本?匿名函數只適用於PHP 5.3 – freento
PHP版本5.2.17,所以這將是一個問題,但試圖添加'函數sortByDiscount($ a,$ b){}'也禁用塊...沒有錯誤或任何東西,只是塊停止顯示像magento轉動它的鼻子! 編輯我的帖子,包括此... –
可能是你的顯示錯誤被切換了。嘗試按照以下答案中的建議重新編寫usort。 – freento