2012-02-10 10 views
1

計算された属性(プロパティ)をProductsに追加したいと思います。Magento - 計算された製品属性(プロパティ)

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

この計算属性はする必要があります:それは価値PHP関数などを使用して計算されるようにされてい

商品ページに表示さ
  • 「階層化ナビ」を通して濾過可能、と
  • "製品リスト"でソートできます。

これはできますか?そしてどうやって?

答えて

2

あなたがしたいことは可能かもしれませんが、あなたが記述したアプローチが実行可能であるとは確信していません。非常に複雑なMagentoプラットフォームを使用するにはあまりにも単純です。

私は、製品の実際の価格がいくつかの入力に基づいて絶えず変化していて、問題をかなりうまく解決することができた同様のプロジェクトを持っていましたが、あなたが望んでいるように思えるようになりました。私はこのシナリオがあなたに役立つかどうかはわかりませんが、ここではそれが...

私は新しい製品属性(eav属性)を作成しました。これらは、価格が本当にすべきかを決定するためのインプットとなりました。私の場合、これらの属性は外部プロセスによってかなり定期的に更新されていたことに注意してください。だから、基本的には、製品を保存するたびに価格フィールドは常に最新のものになるようにそれはそれを行います

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

は、それから私は、単にこのような何かをするだろう「catalog_product_save_before」イベントにオブザーバーを作成しました管理画面に表示されます。

また、入力として使用された属性のいくつかは常に変化していた(外部プロセスによって更新されていた)ので、マジェンタのcronジョブを追加して頻繁に実行しなければならず、このようなもので影響を受けるすべての製品について...

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

したがって、属性はdbに保存する必要があります。もちろん、派生した属性を更新する場所の特定の場所を見つける必要があります。おそらくあなたの要件は、私が記述したものとは少し異なりますが、それはあなたが正しい道を行くかもしれません。

+0

お寄せいただきありがとうございます。私はフィールドを更新するためにオブザーバーとcronジョブを使用する必要性を排除しようとしています。計算された属性のアイデアが不可能な場合、あなたの提案はうまくいくでしょう。計算された属性が達成されるかどうか、どのように達成されるかを誰かが知っているかどうかを見てみましょう。 – mas

+0

本当の課題は、レイヤードナビゲーションとソート可能なリストをdb内のフィールドなしで動作させることです。それはおそらく実行できますが、それはmuckettyの解決策になると思います。運が良かった。 – shaune

+0

はい、あなたは右の階層的なナビゲーションとリストソートは、ページングのためにDBフィールドを必要とするようです。 – mas