2011-01-25 8 views
21

Magento Email Templateもし私が期待したときにステートメントが真と評価されない場合。誰かが何が間違っているか教えてくれますか?次のコードを見てみましょう:Magento電子メールテンプレートの場合Statement

{{var customer.group_id}} 
{{if customer.group_id}}Print true{{else}}Print false{{/if}} 
{{if customer.group_id==4}}Print true{{else}}Print false{{/if}} 
{{if customer.group_id=4}}Print true{{else}}Print false{{/if}} 
{{if customer.group_id eq 4}}Print true{{else}}Print false{{/if}} 

出力は、私は4の周りに引用符を入れてみましたが、同じ結果

4 
Print True 
Print False 
Print False 
Print False 

です。マジェンタの電子メールテンプレートを使用して平等を評価するにはどうすればよいですか?テンプレートのロジックはパターンが正規表現に一致する場合ifDirective関数にコールバックを発行filter機能で(LIB \ Varienないアプリは\ code下)Varien_Filter_Templateによって実装されているようなコードを掘り

答えて

15

、それが見えます。 ifDirectiveは関数を使用してifの状態を評価します。 は、Varien_Filter_Template_Tokenizer_Variableの条件をプロパティまたはメソッドのいずれかにトークン化します。

if($this->isWhiteSpace()) { 
      // Ignore white spaces 
      continue; 
     } else if($this->char()!='.' && $this->char()!='(') { 
      // Property or method name 
      $parameterName .= $this->char(); 
     } else if($this->char()=='(') { 
      // Method declaration 
      $methodArgs = $this->getMethodArgs(); 
      $actions[] = array('type'=>'method', 
           'name'=>$parameterName, 
           'args'=>$methodArgs); 
      $parameterName = ''; 
     } else if($parameterName!='') { 
      // Property or variable declaration 
      if($variableSet) { 
       $actions[] = array('type'=>'property', 
            'name'=>$parameterName); 
      } else { 
       $variableSet = true; 
       $actions[] = array('type'=>'variable', 
            'name'=>$parameterName); 
      } 
      $parameterName = ''; 
     } 

if条件がメソッドとして検出されると、そのメソッドが実行されます。それ以外の場合は、変数の文字列値が返されます。

ifステートメント内の式を評価する場合は、テンプレートが評価できる新しい顧客属性(これに使用できる拡張機能があります)を追加する必要があることを意味します。したがって、ブール値「isMemberOfGroupNameX」属性を定義すると、テンプレートが機能するはずです。

私はこれがあなたが探している答えではないと思っていますが、私はそうだと確信しています。

HTH、 JD

+0

私が間違っている場合は私を訂正してください。しかし、あなたが言うことから、彼はこれをチェックすることもできる何らかの方法(ヘルパーメソッドかもしれません)を作成することもできます。 –

+0

実行時に特定の顧客変数を設定するために、テンプレート外のロジックを構築することもできます。 – Chris

+0

@Joseph - はい、メソッドを作成できますが、Customerモデルを拡張する必要がある{{customer.isGroupMember()}}を使用できるように、Customerオブジェクト上にある必要があると思います。この要件のために必ず推奨するものではありませんが、有効なオプション –

30

私は 'ブロック' 技術を使用することによって、この問題を解決しました。

あなたはブロックに注文を渡して、そのブロック内でロジックを実行します。

私の解決策は異なる問題のためですが、アプローチはここでうまくいくはずです。

私が欲しかったのは、お支払いを行うことを忘れないで確認のオプションといくつかの余分なテキストを確認メールに記載することでした。私は新しいオーダーテンプレートにこれを追加しました:その後、私は、ファイルapp/design/frontend/default/default/template/paymentstatus/orderemail.phtml

を作成

{{block type='core/template' area='frontend' template='paymentstatus/orderemail.phtml' order=$order}}<br /> 

これ持って注文状況だった場合、論理「場合は、」、私の場合、私が見たいと思っていることを確認のためにその注文には資金が必要であることを顧客に喚起するだけです。

+0

は{{block type = 'core/template' area = 'frontend' template = 'paymentstatus/orderemail.phtml' order = $ order} }
'このコードは – Kichu

+0

ありがとう!私は、支払いの種類を取得するために次のコードを使用しました:$ payment_type = $ this-> getData( 'order') - ロシア語の命令を追加しました。http://www.magefast.com/letter-template-magento-fantastico/ – Magefast

+1

> getPayment() - > getMethodInstance() - > getCode(); – deanpodgornik

6

{{depend}}テンプレートタグを使用してテンプレート内でこの権利を達成できました。

{{depend somevar}} 
Print this if somevar evaluates to true 
{{/depend}} 

あなたはなどsendNewOrderEmail()などのメソッドでアプリ/コード/ローカル/メイジ/販売/モデル/ Order.phpでこの変数を想起する必要があります。

+0

無料配送方法を検出することは可能でしょうか? {{depend $ order.freeshippingmethod}} ...ヘルプが高く評価されました –

0

通常のMagentoブロック/クラスでは、$customer->getGroupId()を使用してグループID値にアクセスします。あなたが書いたように、CMS/Emailテンプレートはcustomer.getGroupId()で、customer.group_idではありません。

関連する問題