未知の Magento の領域に足を踏み入れてしまったのではないかと心配しています。グーグルの能力の残りを使い果たし、不足しているので、ここで運を試してみようと思いました。
プラットフォームは Magento Enterprise 1.9.1.1 です。
ODBC 経由で注文を読み取る古風な印刷ソリューションを使用しています。そのため、Magento の MySQL データベースから直接読み取ることはできません (変更の可能性が高いため)。私が行ったことは、parent::_beforeSave() を返す前に、Mage_Sales_Model_Order を拡張して、別のデータベースへの直接 SQL クエリで _beforeSave() 関数をインターセプトすることです。これを行うためのより良い方法がある可能性がありますが、現在は機能しており、問題がどこにあるかは関係ありません。
SQL エラーがスローされると、更新がロールバックされ、エラーと注文データが関数に渡され、エラー情報が記載された電子メールがメーリング リストに送信されます。/locale/en_US/template/email/ の電子メール テンプレート ファイルは、.phtml ファイルを呼び出して、データの配列を次のように処理します。
{{block type='core/template' area='frontend' template='/email/errors/order/beforesave.phtml' orderdata=$orderdata errors=$errors}}
これは、/locale/en_US/template/email/sales/shipment_new.phtml から借用した機能です。そして、これは私が障害にぶつかった場所でもあります。ユーザーが注文を処理しているときにエラーが発生した場合、電子メールはフロントエンドから正常に送信されます。adminhtml から注文を変更すると、メールが送信されますが、上記のブロックはありません。
ブロック呼び出しで area='frontend' の有無にかかわらず試してみましたが、スクリプトは関係なく同じ動作を示します。
テンプレート自体は管理者とフロントエンドの両方から問題なく検出されますが、問題は XML にある可能性があると思います (このブロックは、XML のどこでも定義する必要はありません)。また、Magento 自身のファイルやインターネット上のどこにも、この例は見つかりません。
どんな助けでも大歓迎です。これは私の頭をやっています!
- マイク