Magentoの電子メールテンプレートのIfステートメントが、期待どおりにtrueと評価されていません。誰かが私に何が悪いのか教えてもらえますか?次のコードを見てください。
{{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
Print True
Print False
Print False
Print False
4を引用符で囲んでみましたが、同じ結果になりました。 magentoメールテンプレートのifステートメントで同等性を評価するにはどうすればよいですか?
コードを掘り下げると、テンプレートロジックはfilter
へのコールバックを発行するifDirective
関数のVarien_Filter_Template
(lib\Varienではなくapp\codeの下)によって実装されているようです。パターンが正規表現と一致する場合に機能します。次に、ifDirective
は_getVariable
関数を使用して、if
状態を評価します。次に、_getVariable
は、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
私は「ブロック」技術を使用してこの問題を解決しました。
あなたがすることはあなたがブロックに注文を渡し、次にそのブロックの中であなたの論理をすることです。
私の解決策は別の問題に対するものですが、アプローチはここで機能するはずです。
私が欲しかったのは、小切手による支払いオプションと、確認メールに支払いを促す追加のテキストを含めることでした。これを新しい注文テンプレートに追加しました:
{{block type='core/template' area='frontend' template='paymentstatus/orderemail.phtml' order=$order}}<br />
次に、ファイルを作成しましたapp/design/frontend/default/default/template/paymentstatus/orderemail.phtml
これには「if」ロジックがあり、私の場合、注文のステータスが小切手の場合であるかどうかを確認し、その後、注文に資金の清算が必要であることをお客様に通知しました。
<?php if($this->getData('order')->getStatus()=='cheque') {
echo "<p>Please note that we will require your cheque to clear before we can despatch your order.</p>"; }?>
{{depend}}テンプレートタグを使用して、テンプレートでこの権利を多かれ少なかれ達成することができました。
{{depend somevar}}
Print this if somevar evaluates to true
{{/depend}}
SendNewOrderEmail()などのメソッドでapp/code/local/Mage/Sales/Model/Order.phpのこの変数を呼び出す必要があります。
通常のMagentoブロック/クラス内では、$customer->getGroupId()
を使用してグループID値にアクセスします。同等のCMS/Eメールテンプレートはcustomer.getGroupId()
であり、あなたが書いたようなcustomer.group_id
ではありません。