Les déclarations contenues dans le cas emboîtés Modèles de courrier électronique

magento.stackexchange https://magento.stackexchange.com/questions/852

  •  16-10-2019
  •  | 
  •  

Question

J'essaie d'utiliser si imbriquées déclarations contenues dans mon modèle de courriel, comme suit:

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

Quand je reçois mon email, cependant, je reçois comme ceci:

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

Est-il possible d'utiliser des déclarations imbriquées si dans les modèles de courrier électronique Magento?

Était-ce utile?

La solution

Si vous regardez le début de la classe Varien_Filter_Template vous trouverez les deux constantes suivantes.

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

Dans l'expression régulière de CONSTRUCTION_IF_PATTERN vous remarquerez qu'il a la forme

  

{{if condition}} texte ici {{else}} AUTRES du texte ici {{/ if}}

Alors, malheureusement, les déclarations de nidification de if n'est pas possible que la première correspondance {{/if}} sera pris dans l'expression régulière.

Bien que l'offre de classe autre chose que les déclarations de {{if}}, la déclaration de {{depend}}. Il est à peu près le même que le {{if}} sauf qu'il n'a pas de fonctionnalité de {{else}}.

Heureusement, dans votre cas, les conditions imbriquées ne sont pas compliquées et peut être fait en utilisant {{depend}}. Ainsi, vous pouvez avoir les éléments suivants:

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

S'il doit être plus compliqué que cela, il est préférable de simplifier simplement votre logique en utilisant une classe de bloc pour le modèle.

Autres conseils

Je n'ai jamais essayé les déclarations de contrôle de nidification comme ça, mais une solution possible (mais peut-être un peu plus de travail que vous désirez) est d'inclure un modèle standard de votre modèle .phtml dans e-mail.

Le noyau utilise cette fonctionnalité, et il peut être très pratique pour les situations où vous devez exécuter un peu de PHP dans vos modèles de courrier électronique.

Jetez un oeil à:

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

ainsi que:

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

Dans le modèle de order_new.html, la ligne de contrôle 97 (ou à peu près), vous verrez cet appel:

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

Cet appel vérifie vos fichiers de mise en page pour la sales_email_order_items poignée. Dans sales.xml vous trouverez ce bas près de la ligne 268. Vous verrez cette charge dans le modèle email/order/invoice/items.phtml (entre autres).

Il est tout à fait standard des trucs de mise en page Magento d'ici. Si vous avez un regard sur le modèle de items.phtml, la première chose que vous remarquerez est qu'il affecte la variable $_order. Ceci est passé à travers la poignée de mise en page de modèle de courrier électronique comme order=$order. Une fois que vous entrez dans items.phtml, ils sont tout simplement attribuer cette variable à l'aide $this->getOrder().

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top