Existe-t-il un moyen d'ajouter une boucle foreach dans le modèle d'e-mail?

10

J'essaie de déclencher un courrier au client après avoir passé une commande. Cet e-mail portera tous les produits de vente croisée des produits commandés.

J'ai utilisé les liens suivants comme référence:

envoyer un e-mail à l'aide de l'observateur d'événements

Modèles d'e-mails transactionnels avancés

Tout fonctionne bien.

Mais maintenant mon doute est, serai-je capable d'utiliser une boucle foreach dans le fichier html placé dans le répertoire local ?

Afin que je puisse itérer et imprimer toutes les informations sur le produit dans le modèle de courrier. Quelqu'un peut-il aider?

Shathish
la source

Réponses:

21

Je pense qu'il n'est pas possible d'effectuer directement une boucle foreach dans les e-mails, mais ce que vous pourriez faire est d'inclure un bloc qui fera la boucle dans un modèle standard.

Dans votre e-mail, ajoutez quelque chose comme ce qui suit.

{{block type='core/template' area='frontend' template='email/template.phtml' items=$items}}

Ensuite, dans votre modèle, ajoutez ce qui suit.

<?php foreach ($this->getItems() as $_item): ?>
    <p><?php echo $_item['name'] ?></p>
<?php endforeach; ?>

Pour plus d'informations j'ai suivi ce blog

David Manners
la source
Je suis en train d'essayer ça. acceptera cela dans 2 minutes
Shathish
Doit-on ajouter ce bloc à l'intérieur du modèle d'e-mail? Et comprendra- items=$itemst- il ? Comme $itemsc'est la variable php.
Akshay Taru
Salut, j'ai essayé ci-dessus de ne pas travailler pour moi. Toutes suggestions
Akshay Taru
0

En fait, vous pouvez utiliser une boucle for dans les e-mails. Je l'ai testé sur la version 2.3.3. Il s'agit de l' emplacement du code à inspecter. Voici à quoi cela ressemble dans le modèle:

<ul>
  {{for item in data.items}}
     <li>Name: {{var item.name}}</li>
  {{/for}}
</ul>

Les informations de transport:

$this->transportBuilder->setTemplateVars(
[
 'items' => [
              ['name' => 'Product1'],
              ['name' => 'Product2']
            ]
...

De côté. En 2.3.4, le code a été refactorisé , mais je pense qu'il devrait toujours fonctionner car il n'a pas été supprimé. N'oubliez pas que Magento a supprimé la possibilité d'appeler des fonctions sur des objets à partir de cette version, de sorte que votre order->getItems()fonction peut ne pas fonctionner.

augsteyer
la source