回答:
この場合、ハンドラでこれを管理できます。
create a handler
このハンドラーを使用すると、phtmlファイルがレンダリングされます。上local.xml
でapp/design/frontend/YOUR_PAackage/YOUR_template/layout
ハンドラを定義します。
次のようなレイアウトファイルコード:
<?xml version="1.0"?>
<layout version="0.1.0">
<!-- add new handler -->
<amit_customer_addhan>
<block type="core/template" name="addNewLi" template="sales/showcheckmo.phtml" />
</amit_customer_addhan>
</layout>
その後 on email html call this handler(locale/YourLANG/template/email/)
{{layout handle="amit_customer_addhan" order=$order}}
phtmlファイルコード:
次に、次のphtml file
ようなコードを配置しますshow extra li
<?php if($this->getOrder()->getPayment()->getMethodInstance()->getCode()=='checkmo'):?>
<li>payment check</li>
<?php endif;?>
編集:の場所phtml file
:
app/design/frontend/YOUR_PAackage/YOUR_template/template/sales/
レイアウトハンドラとansパラメータなしでブロックファイルを呼び出す
{{block type='core/template' area='frontend' template='sales/showcheckmo.phtml' order=$order}}
この場合、必要にセット mangento area
としてfrontend
PHTMLファイルとしてここからの呼び出し
私はあなたの最初の質問に答えようとします-条件でディレクティブを使用する方法。デバッグにはxDebugを使用します。そして、私の意見では、電子メールのデバッグは非常に困難です。その場合、magentoの別の部分で同じ構造を持つ例を示します。
販売/注文/ビューでも同じ構造です。で決定さMage/Core/etc/config.xml
れたアドレス出力構造default/customer/address_templates/text
。
私たちのタスクは、「会社名」を表示するかどうかを示す条件を追加することです。などディレクティブVARは、異なり、場合における解析Varien_Filter_Template
方法でフィルタ($値)。このメソッドには、すべての$ constructions(if / depend / var)と、この呼び出しで使用されるすべての$ constructionの反復があります。
$replacedValue = call_user_func($callback, $construction);
if / depende / varごとに独自のメソッドがあります。を見ようよpublic function ifDirective($construction)
public function ifDirective($construction)
{
if (count($this->_templateVars) == 0) {
return $construction[0];
}
if($this->_getVariable($construction[1], '') == '') {
if (isset($construction[3]) && isset($construction[4])) {
return $construction[4];
}
return '';
} else {
return $construction[2];
}
}
次に、保護されたメソッド_getVariableを見てみましょう。私はあなたの注目を一列にしたいと思います:
} elseif (isset($stackVars[$i-1]['variable']) && $stackVars[$i-1]['variable'] instanceof Varien_Object) {
以下のコメントを見てください:
// If object calling methods or getting properties
したがって、条件を作成するために、$ stackVarsはオブジェクトであり、Varien_Objectのインスタンスである必要があります(ほとんどのモデルは、Varien_Objectから拡張されたMage_Core_Model_Abstractから拡張されています)。上記のいくつかのステップを登りましょう。stackVarsとオブジェクトに追加する必要があります。
クラスMage_Customer_Block_Address_Renderer_Defaultの私の例では、magentoがメソッドfilter($ value)を呼び出します。
public function render(Mage_Customer_Model_Address_Abstract $address, $format=null)
{
//parsing $data array
$formater->setVariables($data);
$format = !is_null($format) ? $format : $this->getFormat($address);
return $formater->filter($format);
}
このメソッドでは、注文オブジェクトを$ data配列に追加します。私のタスクによると、注文オブジェクトをこの配列に追加してみましょう。'$ formater-> setVariables($ data);'の前に実行します
$data['order_object'] = $address->getOrder();
この後、magentoはこのオブジェクトを解析し、そのメソッドを呼び出します。たとえば、新しいメソッドgetPaymentOutput()を追加します。Orderクラスに単純な機能を追加します。
public function isPrinted()
{
if ($this->getPayment()->getMethod() == 'checkmo') {
return true;
} else {
return false;
}
}
その後、xmlディレクティブを次のように変更します。
{{if order_object.isPrinted()}}{{var smth}}<br />{{/if}}