2012-02-10 141 views
1

我想爲產品添加計算屬性(屬性)。它的價值在於使用PHP的功能,例如計算:Magento - 已計算產品屬性(屬性)

function CalculateCustomAttribute() { 
    ... 
    //Do some calculations based on other Product attributes, date, etc 
    ... 
    return $calculatedValue; // type float 
} 

這個計算出來的屬性必須是:

  • 在產品頁面顯示,
  • 過濾通過「分層導航」和
  • 可在「產品清單」中排序。

可以這樣做嗎?如何?

回答

2

你想做什麼可能是可能的,但我不確定你所描述的方法是否可行,我認爲這對於處理非常複雜的Magento平臺來說太簡單了。

我有一個類似的項目,其中產品的實際價格基於少量投入不斷變化,我能夠很好地解決問題,但它肯定比較複雜,感謝您似乎期待的。我不確定這種情況對你有沒有幫助,但是這裏有...

基本思想是我創建了新的產品屬性(eav屬性)。這些作爲確定價格真正應該是什麼的投入。請注意,就我而言,這些屬性正在由外部進程定期更新。

然後,我創建了一個觀察者對「catalog_product_save_before」事件,只會做這樣的事情:

//some calculations to get the $newPrice 
$product->setPrice($newPrice); 

所以基本上,這將讓這個價格區域將永遠是目前的每次保存產品在管理屏幕中。

此外,由於用作輸入的幾個屬性不斷變化(由外部進程更新),所以我們還必須添加一個magento cron作業,以便每隔一段時間運行一次,並重新計算價格對於所有受影響的產品有這樣的東西...

//some calculations to get the $newPrice 
$product->addAttributeUpdate("price", $newPrice, Mage::app()->getStore()->getStoreId()); 

所以這一切歸結爲事實,你應該有該屬性保存在分貝。當然,您需要找到更新派生屬性的具體位置。也許您的要求與我所描述的要求略有不同,但至少可以讓您走上正確的道路。

+0

非常感謝您的建議。我試圖消除使用觀察員和cron作業來更新字段的需要。如果計算屬性的想法是不可能的,那麼你的建議會很好的解決。讓我們看看是否有人知道是否以及如何實現計算屬性。 – mas 2012-02-10 19:54:57

+0

真正的挑戰是讓分層導航和可排序列表在db中沒有字段的情況下工作。這可能是可以做到的,但我認爲這將是一個舒適的解決方案。祝你好運。 – shaune 2012-02-10 20:10:30

+0

是的,你是對的 - 分層導航和列表排序似乎需要數據庫字段由於分頁。 – mas 2012-02-10 22:12:29