問題
次の方法でトランザクション メール テンプレートにブロックを追加しようとすると、次のようになります。
{{block type='core/template' area='frontend' template='invent/baskettimer/email_items.phtml' record=$record}}
次のエラーが発生し、何もレンダリングされません。
CRIT (2): Not valid template file:frontend/base/default/template/invent/baskettimer/email_items.phtml
トラブルシューティング
- 通常、この警告は、継承を壊しているタイプミスを示していますが、私は 4 重にチェックしており、これでうまくいくはずです。
- 次に、ファイルをベースにコピーしてテストを行ったところ、正しくレンダリングされました。
- カスタム ブロックを作成し、テンプレートを設定すると、同じエラーが表示されます。
仮説
私には、テンプレートの継承が壊れているか、電子メールに実装されていないようです。そのため、常にベースで検索されます。テンプレートをそこに置くことができないため、それらを呼び出す方法がわかりません。
考えられる回避策
- ブロックを html にレンダリングし、レンダリングする変数として送信します。これに関する問題は、モデル レベルから電子メールを送信していて、ヘルパーを使用しても、ブロックを事前にレンダリングするのに苦労していることです。
- メソッドを使用してデータをレンダリングします。これはメッセージ/MVCに対するものであるため、実際には実行したくありません。
どんな助けでも大歓迎です。
バウンティの更新
だから私は問題を追跡しました。おそらく今は簡単な解決策です。
問題は、私が cronjob から呼び出しているのに正しいストア ビューがないことです。シェル スクリプトを使用して同様の状況を再現し、_appCode を null に変更するのはかなり簡単です。
<?php
require_once 'abstract.php';
class Mage_Shell_Shell extends Mage_Shell_Abstract
{
protected $_appCode = ''; // works - remove to not work
/**
* Run script
*
*/
public function run()
{
Mage::getModel('invent_baskettimer/email')->sendJob();
}
}
$shell = new Mage_Shell_Shell();
$shell->run();
したがって、基本的に質問は次のようになりました。
block->toHtml()
ストア ビューに関係なくを呼び出すにはどうすればよいですか?