Domanda

Sto cercando di utilizzare annidati se le dichiarazioni del mio modello e-mail, come le seguenti:

{{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}}

Quando ricevo la mia email, però, ho capito in questo modo:

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}}

E 'possibile utilizzare annidati if nei modelli di posta elettronica Magento?

È stato utile?

Soluzione

Se si guarda alla partenza della classe Varien_Filter_Template troverete le seguenti due costanti.

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

Nel espressione regolare di CONSTRUCTION_IF_PATTERN si noterà che ha la forma di

{{if condizione}} Text Goes Here {{else}} ALTRE Text Goes Here {{/ if}}

Quindi, le dichiarazioni if purtroppo nidificazione non è possibile in quanto la prima {{/if}} abbinato saranno catturati nelle espressioni regolari.

Anche se, le offerte di classe qualcosa di diverso dalle dichiarazioni {{if}}, la dichiarazione {{depend}}. E 'quasi la stessa della {{if}} eccetto che ha alcuna funzionalità {{else}}.

Per fortuna nel tuo caso, le condizioni nidificate non sono complicate e può essere fatto utilizzando {{depend}}. Così si può avere il seguente:

{{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}}

Se ha bisogno di essere più complicato che questo, è meglio per semplificare appena la logica utilizzando una classe di blocco per il modello.

Altri suggerimenti

Non ho mai provato istruzioni di controllo di nidificazione del genere, ma una soluzione possibile (anche se forse un po 'di lavoro di quanto si voglia) è quello di includere un modello standard di .phtml all'interno del vostro modello e-mail.

Il nucleo utilizza questa funzione, e può essere molto utile per le situazioni in cui è necessario eseguire alcuni PHP all'interno dei vostri modelli di posta elettronica.

Date un'occhiata a:

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

così come:

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

Nel modello order_new.html, la linea di controllo 97 (o giù di lì), vedrete questa chiamata:

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

Questa chiamata controlla i file di layout per la sales_email_order_items maniglia. In sales.xml troverete questo in giù vicino alla linea 268. Vedrete questa carica nel modello email/order/invoice/items.phtml (tra le altre cose).

E 'tutta roba abbastanza standard di layout Magento da qui. Se si dispone di uno sguardo al modello items.phtml, la prima cosa che noterete è che assegna la variabile $_order. Questo è stato fatto passare attraverso nel manico il layout del modello e-mail come order=$order. Una volta che si entra in items.phtml, sono solo l'assegnazione di tale variabile utilizzando $this->getOrder().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top