Czy istnieje sposób na dodanie pętli foreach do szablonu wiadomości e-mail?

10

Próbuję wysłać wiadomość e-mail do klienta po złożeniu zamówienia. Ten e-mail zawiera wszystkie produkty sprzedaży krzyżowej zamówionych produktów.

Jako odniesienia wykorzystałem następujące linki:

wysłać e-mail za pomocą obserwatora zdarzeń

Zaawansowane transakcyjne szablony e-mail

Wszystko działa dobrze.

Ale teraz mam wątpliwości, czy będę w stanie użyć pętli foreach w pliku HTML umieszczonym w katalogu ustawień regionalnych ?

Aby móc iterować i drukować wszystkie informacje o produkcie w szablonie poczty. Czy ktoś może pomóc?

Shathish
źródło

Odpowiedzi:

21

Myślę, że nie można bezpośrednio wykonać pętli foreach w wiadomościach e-mail, ale można zrobić, aby dołączyć blok, który wykona pętlę w zwykłym szablonie.

W e-mailu dodaj coś takiego.

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

Następnie w swoim szablonie dodaj:

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

Aby uzyskać więcej informacji, śledziłem tego bloga

David Manners
źródło
Tak, naprawdę tego próbowałem. zaakceptuje to za 2 minuty
Shathish
Czy musimy dodać ten blok do szablonu e-maila? I czy to zrozumie items=$items? Podobnie jak $itemszmienna php.
Akshay Taru,
Cześć, próbowałem powyżej nie działa dla mnie. Wszelkie sugestie
Akshay Taru,
0

W rzeczywistości możesz używać pętli for w wiadomościach e-mail. Przetestowałem to w wersji 2.3.3. Jest to lokalizacja kodu do sprawdzenia. Tak to wygląda w szablonie:

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

Informacje o transporcie:

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

Na bok. W 2.3.4 kod został przebudowany , ale uważam, że powinien on nadal działać, ponieważ nie został usunięty. Pamiętaj, że w tej wersji Magento usunął możliwość wywoływania funkcji na obiektach, więc twoja order->getItems()funkcja może nie działać.

augsteyer
źródło