Frage

Ich versuche, verschachtelte If -Anweisungen in meiner E -Mail -Vorlage zu verwenden, wie die folgenden:

{{if subscriber.promo_group}}
    <p>You are one of the first {{var subscriber.promo_group}} subscribers.</p>
{{/if}}

{{if subscriber.coupon_code}}
    <p>Use code {{htmlescape var=$subscriber.coupon_code}} for {{htmlescape var=$subscriber.discount_amount}} off.</p>
    {{if subscriber.partner_coupon_code}}
        <p>Or, code {{var subscriber.partner_coupon_code}} for {{htmlescape var=$subscriber.partner_discount_amount}} off at checkout.</p>
    {{/if}}
{{else}}
    {{if subscriber.partner_coupon_code}}
        <p>Use code {{htmlescape var=$subscriber.partner_coupon_code}} for {{htmlescape var=$subscriber.partner_discount_amount}} off at checkout.</p>
    {{/if}}
{{/if}}

Wenn ich meine E -Mail bekomme, bekomme ich sie so:

You are one of the first 20 subscribers.

Use code XXXXX-QTEALK15 for $35 off.

Or, code XXXXX10OFF for 10% off at checkout.

{{else}}
Use code XXXXX10OFF for 10% off at checkout.

{{/if}}

Ist es möglich, verschachtelt zu werden, wenn Aussagen in den Magento -E -Mail -Vorlagen?

War es hilfreich?

Lösung

Wenn Sie sich den Beginn der ansehen Varien_Filter_Template Klasse finden Sie die folgenden zwei Konstanten.

const CONSTRUCTION_DEPEND_PATTERN = '/{{depend\s*(.*?)}}(.*?){{\\/depend\s*}}/si';
const CONSTRUCTION_IF_PATTERN = '/{{if\s*(.*?)}}(.*?)({{else}}(.*?))?{{\\/if\s*}}/si';

Im regulären Ausdruck von CONSTRUCTION_IF_PATTERN Sie werden feststellen, dass es die Form von hat

{{{if Condition}} Text geht hier {{{else}} Anderer Text geht hier {{/wenn}}

Also leider nisten if Aussagen sind nicht möglich, wie der erste übereinstimmte {{/if}} wird im regulären Ausdruck gefangen.

Obwohl die Klasse etwas anderes als die bietet {{if}} Aussagen, die {{depend}} Aussage. Es ist fast dasselbe wie das {{if}} außer es hat keine {{else}} Funktionalität.

Glücklicherweise sind in Ihrem Fall die verschachtelten Bedingungen nicht kompliziert und können verwendet werden {{depend}}. Sie können also Folgendes haben:

{{if subscriber.promo_group}}
    <p>You are one of the first {{var subscriber.promo_group}} subscribers.</p>
{{/if}}

{{if subscriber.coupon_code}}
    <p>Use code {{htmlescape var=$subscriber.coupon_code}} for {{htmlescape var=$subscriber.discount_amount}} off.</p>
    {{depend subscriber.partner_coupon_code}}
        <p>Or, code {{var subscriber.partner_coupon_code}} for {{htmlescape var=$subscriber.partner_discount_amount}} off at checkout.</p>
    {{/depend}}
{{else}}
    {{depend subscriber.partner_coupon_code}}
        <p>Use code {{htmlescape var=$subscriber.partner_coupon_code}} for {{htmlescape var=$subscriber.partner_discount_amount}} off at checkout.</p>
    {{/depend}}
{{/if}}

Wenn dies komplizierter sein muss, ist es am besten, Ihre Logik mithilfe einer Blockklasse für die Vorlage zu vereinfachen.

Andere Tipps

Ich habe noch nie versucht, solche Kontrollanweisungen wie diese zu nisten, aber eine mögliche Lösung (obwohl vielleicht ein bisschen mehr Arbeit als Sie möchten) besteht darin .phtml Vorlage in Ihrer E -Mail -Vorlage.

Der Kern verwendet diese Funktion und kann für Situationen sehr praktisch sein, in denen Sie einige PHP in Ihren E -Mail -Vorlagen ausführen müssen.

Schauen Sie sich an:

app/locale/en_US/template/email/sales/order_new.html

ebenso gut wie:

app/design/frontend/base/default/layout/sales.xml

In dem order_new.html Vorlage, Überprüfen Sie die Zeile 97 (oder hier) Sie sehen diesen Anruf:

{{layout handle="sales_email_order_items" order=$order}}

Dieser Anruf überprüft Ihre Layoutdateien auf das Handle sales_email_order_items. Im sales.xml Sie werden dies in der Nähe von Zeile 268 finden. Sie werden sehen, dass dies in der Vorlage geladen wird email/order/invoice/items.phtml (unter anderem).

Es ist alles ziemlich Standard -Magento -Layout -Zeug von hier. Wenn Sie sich das ansehen items.phtml Vorlage, das erste, was Sie bemerken, ist, dass sie das zuweist $_order Variable. Dies wird im Layout -Handle der E -Mail -Vorlage als durchgesetzt order=$order. Sobald Sie in Ankommen kommen items.phtml, Sie weisen diese Variable nur mit Verwendung zu $this->getOrder().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top