2011-04-04 4 views
1

cronから実行中のオブザーバーを使用して送信された特定の電子メールテンプレートを作成する必要がありました。
メールを受け取ったとき、私は提供された変数の価値がありません。Magento内で電子メールテンプレートの機能はどのように機能しますか?

$vars = array(
    'product' => $product, 
    'customer' => $customer 
); 

$mailTemplate->sendTransactional(
    $mailId, 
    'general', 
    $customer->getData('email'), 
    $customer->getData('firstname') . ' ' . $customer->getData('lastname'), 
    $vars 
); 

$product & $customerモデルコレクション(Product_Collection & Customer_Collection)から両方のオブジェクトです。私のテンプレートで

、私はこのようにそれらにアクセスしようとしている:

Dear {{htmlescape var=$customer.name}}, 
<p>Check {{htmlescape var=$product.name}}</p> 

任意のアイデア?

ところで、どのように私の製品にURLを構築できますか? (顧客が商品を見るためにリンクをクリックするようにする)

+1

実際のフィルタが適用されたときに変数が設定されている場合は、手を叩いてデバッグを開始します。使用するのに最適なのはhttp://www.xdebug.org/で、php ideと一緒に使用してデバッグセッションを開始することができます –

答えて

4

変数にドル記号を付けずに試してみてください。デフォルトの電子メールテンプレートを見ると、それらのドル記号は含まれていないようです。

希望に役立ちます!

おかげで、 ジョー

+0

ありがとうございます。 – JohnT

2

.は、オブジェクトと文字列の後、そのオブジェクトで呼び出されるmethodであると見なされる前に、これらのパラメータは、一部ながら、トークン化されています。

従って$customer.nameは、テンプレート処理中に$customer->name()と評価される。お客様の名前を取得するには、$customer->getName()をPHPで呼び出しますので、テンプレートに$customer.getName()を使用してください。

しかし、異なるテンプレートメソッドにパラメータを渡す方法には重要な違いがあります。私がソースコードから集めることができるように、属性割り当てのない単一の引数としてパラメータを取るすべてのテンプレートメソッドは、先頭に$を付けずに呼び出す必要があり、属性を使用するすべてのメソッドは接頭辞として$を必要とします。

属性の割り当て

{{htmlescape var=$customer.getName()}} 

しかし、単一のparam

{{var customer.getName()}} 

として*Directive()の機能を見て、クラスMage_Core_Model_Email_Template_Filter内のすべての利用可能な方法を検索します。

関連する問題