質問
私は、顧客購入総購入に上限を設定する手段として、製品にMagento Stockアイテムの「最大販売数量」値を使用するクライアント向けのプラグインを実装しています。
複数のイベント、コントローラーアクションでこの条件を確認する必要があるため、リソースモデルからこの条件をチェックするローカル保護機能を作成できるオブザーバーだけに封じ込めることはできません。
私の要件では、カートの追加を制限します。しかし、私はジレンマにいることに気づきます:コントローラーから addAction
頼る必要があります throw
- しかし sales_quote_merge_before
問題のある製品を効果的に設定し、メッセージを投稿することができるようです customer/session
, しかし、代わりにコントローラーのアクションと同様に、それぞれ投げることができました。
私の質問は次のとおりです。
- この悪い習慣は、効果的に頼ることです
throw
モジュールヘルパーから? - これは、むしろ、呼び出す必要があるモデル方法ですか?
- モジュールを乾燥させることができる最良の設計戦略は何ですか?
編集:
EE 1.12の時点で、私は4つのインスタンスしか見られません Helper/Data.php
スローするファイル-3つはAPI2/OAUTHです。 Mage/Coreも一度それを行いますが、これは他の唯一のインスタンスのようです。さまざまなサードパーティは、ここでさまざまなアプローチをとっているように見えます。
フィードバックは大歓迎です。
解決
顧客に「申し訳ありませんが、それほど購入できません」というのは例外です。予想されるケースは、十分であり、製品をカートに入れることです。そしてもう1つの言葉:Magentoの内部には、たとえばMagentoの中に試してみるブロックがあります \Mage_Checkout_CartController::addAction
:
// [...]
} catch (Mage_Core_Exception $e) {
if ($this->_getSession()->getUseNotice(true)) {
$this->_getSession()->addNotice(Mage::helper('core')->escapeHtml($e->getMessage()));
// [...]
このように言わせてください:彼らは使用されるためにそこにあります:-)