支払い方法が取引メールの場合は行を表示


8

お客様がお支払い方法チェックアウトマネーオーダーを選択したときにのみ線を表示したい。顧客が支払い方法としてマネーオーダーを選択した場合<li>、トランザクションEメールに追加の行を表示したいと思います。

顧客が他の支払い方法を選択した場合、追加<li>は非表示にする必要があります。

私はこのコードを試しましたが、うまくいきません:

{{depend order.getPayment().getMethod() == "checkmo"}}
    <li>payment check</li>
{{/depend}}

どうすればそれを達成できますか?

回答:


7

この場合、ハンドラでこれを管理できます。

ハンドラーを使用:

ハンドラーを作成し、レイアウトファイルで定義します。

create a handlerこのハンドラーを使用すると、phtmlファイルがレンダリングされます。上local.xmlapp/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 fileapp/design/frontend/YOUR_PAackage/YOUR_template/template/sales/

または:ハンドラーの呼び出しなし:

レイアウトハンドラとansパラメータなしでブロックファイルを呼び出す

 {{block type='core/template' area='frontend' template='sales/showcheckmo.phtml' order=$order}}

この場合、必要にセット mangento areaとしてfrontendPHTMLファイルとしてここからの呼び出し


こんにちはアミット、showcheckmo.phtmlファイルはどこにありますか、またはどこに作成する必要がありますか?
JGeer 2015

更新されました。確認してください
アミットベラ

試してみましたが、うまくいきません。メール内に行が表示されません。
JGeer 2015

静的コンテンツをphtmlに配置してみてください。そして、テキストがCKDかどうか
Amit Bera

いいえ、静的コンテンツでは機能しません。何が悪いのですか?
JGeer 2015

0
order.getPayment().getMethodInstance().getCode() == 'banktransfer'

それを試しましたが、それもうまく
いき

0

私はあなたの最初の質問に答えようとします-条件でディレクティブを使用する方法。デバッグには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)を呼び出します。


ここで私は解決策を提供します。警告!このソリューションはあまりクリーンではありません。magentoの動作を示すことが目的です。自分で書き直してください。

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}}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.