設定可能な金額未満の合計で誰かがチェックアウトするのを防ぐ最小合計チェックアウト モジュールを作成しようとしています。
イベントsales_quote_save_before
を使用して、開いたときにチェックアウト/カートページにエラーを表示しています。
<?xml version="1.0"?>
<config>
<frontend>
<events>
<sales_quote_save_before>
<observers>
<b2b>
<class>b2b/observer</class>
<method>checkTotalsCart</method>
</b2b>
</observers>
</sales_quote_save_before>
</events>
</frontend>
</config>
そしてオブザーバーでは
public function checkTotalsCart()
{
if ($this->_hasCartError()) { /* does some checks, returns bool */
$this->_setErrorMessage();
}
}
protected function _setErrorMessage()
{
$session = Mage::getSingleton("b2b/session"); /* extends Mage_Core_Model_Session */
$session->addError($this->helper->getErrorMessage());
}
問題は、カート ページからカートを更新すると、エラー メッセージが 2 回表示されることです。そのイベントは複数回行われていると思います。
メッセージが以前にカスタム セッション変数で設定されていたかどうかを確認しようとしました
protected function _setErrorMessage()
{
$session = Mage::getSingleton("b2b/session");
if ($session->hasErrorMessage()) {
return;
}
$session->addError($this->helper->getErrorMessage());
$session->hasErrorMessage(true);
}
しかし、それもうまくいきませんでした。エラー メッセージがページ リクエストごとに 1 回だけ表示されるようにするにはどうすればよいですか?