Existe uma maneira de adicionar loop foreach no modelo de email?


10

Estou tentando acionar um e-mail para o cliente depois que ele faz um pedido. Este email conterá todos os produtos de venda cruzada dos produtos pedidos.

Eu usei os seguintes links como referência:

enviar email usando o observador de eventos

Modelos de email transacionais avançados

Tudo está funcionando bem.

Mas agora minha dúvida é: poderei usar o loop foreach dentro do arquivo html colocado no diretório locale ?

Para que eu pudesse iterar e imprimir todas as informações do produto no modelo de correio. Alguém pode ajudar?

Respostas:


21

Eu acho que não é possível executar diretamente um loop foreach em emails, mas o que você pode fazer é incluir um bloco que fará o loop em um modelo regular.

No seu email, adicione algo como o seguinte.

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

Em seguida, no seu modelo, adicione o seguinte.

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

Para mais informações eu segui este blog


Ya, na verdade, estava tentando isso. vai aceitar isso em 2 minutos
Shathish 27/09/13

Temos que adicionar esse bloco dentro do modelo de email? E isso vai entender items=$items? Como $itemsé a variável php.
Akshay Taru

Oi, eu tentei acima não funciona para mim. Alguma sugestão
Akshay Taru

0

Na verdade, você pode usar um loop for nos emails. Eu testei na versão 2.3.3. Este é o local do código para inspecionar. É assim que parece no modelo:

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

As informações de transporte:

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

A parte, de lado. Na 2.3.4, o código foi refatorado , mas acredito que ainda deve funcionar, pois não foi removido. Lembre-se de que o Magento removeu a capacidade de chamar funções em objetos a partir desta versão, portanto sua order->getItems()função pode não funcionar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.