1

ストア用の新しいメール テンプレートをいくつか作成しています。

私はテンプレートを 95% 動作させています。私の唯一の問題は、注文項目を示す表で、合計が取り込まれたファイルが見つからないようで、以下の問題を示す画像にリンクされていることです。

ここに画像の説明を入力

当然、メール用であるため、この領域にインライン コードを追加したり、左側のラベルを変更したりしたいと考えています。合計領域を次のファイルまで追跡することができました

template/sales/order/totals.phtml

これがどのファイルを呼び出すのか、私は途方に暮れています。

4

1 に答える 1

3

覗いてみたら

layout/sales.xml:268

レイアウト ハンドル sales_email_order_items が表示されます。内部には、そのテンプレートを持つブロック「order_totals」があります。メールに新しい合計を追加するには、その子として追加するだけです。275 行目に、'tax' という名前のブロックが追加されていることがわかります。

totals.phtml ファイル内で、foreach の一部として $this->getTotals() を呼び出していることがわかります。そのメソッドはで定義されています

Mage/Sales/Block/Order/Totals.php:281

これは、すでに定義されている合計を返すだけです。このデータは、次のように定義された config.xml ファイルによって入力されます。

<global><sales><quote><totals>... 

totals.phtml に戻り、合計にブロックが定義されているかどうかを確認します。これは、config.xml ファイル内のフィールドになります。カスタマイズしたい合計モデルがある場合は、そのようにします。

それ以外の場合は、ページがレンダリングされる前に (44 行目の _beforeToHtml() を呼び出します)、子ブロックを反復処理し、メソッド 'initTotals' に応答する場合は、そのメソッドを呼び出します。そのメソッドは、合計を表すオブジェクトを作成し、それを親に追加する必要があります。たとえば、最近書いた合計ブロックのコードは次のとおりです (公開できないコードに基づいています)。

public function initTotals()
{
    if ((float)$this->getParentBlock()->getSource()->getMytotalAmount() == 0) {
        return $this;
    }
    $total = new Varien_Object(array(
        'code'      => $this->getNameInLayout(),
        'block_name'=> $this->getNameInLayout(),
        'area'      => $this->getArea()
    ));
    $after = $this->getAfterTotal();
    if (!$after) {
        $after = 'subtotal';
    }
    $this->getParentBlock()->addTotal($total, $after);
    return $this;
}

これが役に立ったことを願っています。

于 2012-07-30T19:20:42.933 に答える