E-Mail Vorlage nach Tag/Produkt anpassen

Liebe Freunde der Sonne,

ich versuche derzeit mein E-Mailbestellbestätigung anzupassen. Ich habe drei Produktkategorien und die Produke entsprechend mit einem Tag (insgesamt 3) versehen. Jetzt habe ich das bei Oderlyemail eingefügt und Text 1 wird mir zweimal untereinander angezeigt. Kann mir jemand helfen?

Herzlichen Dank für Ihren Einkauf.

{% for item in line_items %}

{% for tag in item.product.tags %}

{% if tag contains “physischeProdukte” %}

TEXT 1

Sie erhalten eine weitere E-Mail, sobald Ihre Bestellung {% if pickup_in_store? %}zur Abholung bereit ist{% else %}versandt wurde{% endif %}.

{% elsif tag contains “onlinekurs” %}

TEXT 2

{% elsif tag contains “Abonnement Mitgliederbereich” %}

TEXT 3

{% endif %}

{% endfor %}

{% endfor %}

  1. Frage: Manchmal kaufen ja Menschen physische Produkte und Online-Kurse. Nun stellt sich mir die Frage wie ich das darstelle. Der elsif tag ist ja eine “entweder oder”, ich bräuchte aber für Käufer, die verschiedene Produkte kaufen aus einem der drei Bereiche dann auch entsprechende Bestellbestätigungen wo alle Informationen drin sind.

Ich bin dankbar für jede Hilfe!

@Nina2020 der Text 1 wird dir zweimal angezeigt, wenn zwei Produkte das Tag haben. Besser wäre es zu prüfen, ob mind. eines der Produkte das Tag hat. Im gleichen Schritt kannst du auch prüfen, ob die anderen Tags vorhanden sind. Das würde dann so aussehen:

{% assign physical = false %}<--- (Variable) wir gehen davon aus, dass keiner Tags vorhanden ist.
{% assign online = false %}
{% assign abo = false %}

{% for item in line_items %}
  {% for tag in item.product.tags %}
    {% if tag contains "physischeProdukte" %}<--- wir prüfen ob das Item das Tag hat
      {% assign physical = true %} <--- wenn ja, setzen wir die variabel auf "True"
    {% elsif tag contains "Onlinekurs" %}
      {% assign online = true %}
    {% elsif tag contains "Abonnement Mitgliederbereich" %}
      {% assign abo = true %}
    {%endif%}
  {%endfor%}
{%endfor%}

{% if physical %} <--- wenn Variable TRUE soll der Text angezeigt werden.
Text 1
{% endif %}
{% if online %}
Text 2
{% endif %}
{% if abo %}
Text 3
{% endif %}

Bitte denk daran, meine Hinweise “<----” zu entfernen.

Wenngleich es mehrere Produkte gibt, die den gleichen Tag haben, ändert sich der Status (TRUE) dadurch nicht. Es reicht also, wenn ein Produkt das Tag hat, damit der entsprechende Text angezeigt wird.

Ich hoffe, das hilft dir weiter.

Ja, das ist ja klasse! Danke dir.

Noch ein Gedanke: manche Menschen kaufen ja mehrere Produkte aus verschiedenen Tag Gruppen. Würde dann folgendes funktionieren?:

{% assign physical = false %}
{% assign online = false %}
{% assign abo = false %}

{% for item in line_items %}
{% for tag in item.product.tags %}
{% if tag contains “physischeProdukte” %}
{% assign physical = true %}
{% elsif tag contains “onlinekurs” %}
{% assign online = true %}
{% elsif tag contains “Abonnement Mitgliederbereich” %}
{% assign abo = true %}
{%endif%}
{%endfor%}
{%endfor%}

{% if physical %}
Text 1
{% endif %}
{% if online %}
Text 2
{% endif %}
{% if abo %}
Text 3
{% endif %}

Ziel ist ja, dass wenn Produkt A (online) und produkt B (abo) gekauft werden auch beide Texte untereinander angezeigt werden.
Ist das so möglich? Und da ich gerade erst anfange mich damit zu beschäftigen: Muss das {%endfor%}
{%endfor%} nicht an den Schluss?

@Nina2020 das habe ich im Code schon berücksichtigt.

In der Iteration prüfen wir ja “nur” das Vorhandensein von Tags und weisen ggf. der Variablen einen neuen Wert (True) zu. Damit ist die Iteration auch schon abgeschlossen. Danach fragen wir die Variablen über die IF/ELSE-Funktion ab. Hier ist dann keine Iteration notwendig – schließlich wollen wir die Texte nur einmal anzeigen und nicht für jedes Produkt mit dem gleichen Tag noch mal anzeigen.

Ich hoffe, meine Erklärung ist halbwegs sinnvoll … :sweat_smile:

Danke dir. Ja ich lerne noch. Es scheint soweit zu funktionieren (zumindest in der Ansicht mit den zwei physischen Produkten). Ich habe nur jetzt eine Problem mit dem Abstand. Die erste Zeile “Vielen Dank für deinen Einkauf” und Text 1 sind etwa 20 Zeilen voneinander entfernt. Was mache ich falsch?

Herzlichen Dank für Ihren Einkauf

{% assign physical = false %}
{% assign online = false %}
{% assign abo = false %}
{% for item in line_items %}
{% for tag in item.product.tags %}
{% if tag contains “physischeProdukte” %}
{% assign physical = true %}
{% elsif tag contains “onlinekurs” %}
{% assign online = true %}
{% elsif tag contains “Abonnement Mitgliederbereich” %}
{% assign abo = true %}
{%endif%}
{%endfor%}
{%endfor%}
{% if physical %}

Ihre Sendung wird innerhalb 7-14 Werktagen (Mo-Fr) versendet. Sie erhalten hierzu eine gesonderte Versande-mail.

Sie erhalten eine weitere E-Mail, sobald Ihre Bestellung {% if pickup_in_store? %}zur Abholung bereit ist{% else %}versandt wurde{% endif %}.

{% endif %}
{% if online %}

Jetzt kann es losgehen! Du kannst dein Produkt {{ line_item.product_title }} hier ansehen.

Melde dich hier mit deiner E-Mail Adresse und deiner Bestellnummer {{ name }} an.
{% endif %}
{% if abo %}

Jetzt kann es losgehen!
Für Teilnehmer des wöchentlichen Coachings geht es hier lang.

{% endif %}

@Nina2020 du kannst mal aus allen {% … %} ein {%- … -%} machen (bindestriche einfügen).

Hier die Erläuterung dazu:

https://shopify.github.io/liquid/basics/whitespace/

Das scheint es noch schlimmer zu machen. Heisst: ich habe noch mehr whitespace wenn ich das eingebe:

{%- assign physical = false -%}
{%- assign online = false -%}

{% assign abo = false -%}
{%- for item in line_items -%}

{%- for tag in item.product.tags -%}

{%- if tag contains “physischeProdukte” -%}

{%- assign physical = true -%}
{%- elsif tag contains “onlinekurs” -%}

{%- assign online = true -%}
{%- elsif tag contains “Abonnement Mitgliederbereich” -%}

{%- assign abo = true -%}

{%-endif-%}

{%-endfor-%}

{%-endfor-%}

{%- if physical -%}

Ich habe das Problem gelöst. Nämlich indem ALLE Leerzeichen gelöscht werden und dafür musste ich den Code aus dem Orderlyemail editor in meine Notes auf dem Mac kopieren und alle Leerzeichen löschen und wieder einfügen. Ob die Striche jetzt einen Unterschied machen, weiß ich nicht. Aber so klappt es:

{%- assign physical = false -%}{%- assign online = false -%}{% assign abo = false -%}{%- for item in line_items -%}{%- for tag in item.product.tags -%}{%- if tag contains “physischeProdukte” -%}{%- assign physical = true -%}{%- elsif tag contains “onlinekurs” -%}{%- assign online = true -%}{%- elsif tag contains “Abonnement Mitgliederbereich” -%}{%- assign abo = true -%}{%-endif-%}{%-endfor-%}{%-endfor-%}{%- if physical -%} Ihre Sendung wird innerhalb 7-14 Werktagen (Mo-Fr) versendet. Sie erhalten hierzu eine gesonderte Versande-mail.

Vielen Dank @Finer !

Noch eine Frage: Wie sähe der Code aus, wenn man für alle drei Tags dazu noch unterschiedliche Texte schreiben will abhängig davon, ob die Bestellung bezahlt ist oder nicht? Ist das möglich, dass unbezahlte Bestellung einen anderen Text erhalten?

Hey Nina! @Nina2020

Es gibt die Liquid-Variable order.financial_status die den Zahlungsstatus der Bestellung überprüft.

  • Mit {%- if order.financial_status == "paid" -%} prüfst du, ob die Bestellung bezahlt ist.
  • Mit der for-Loop durchläufst du die Produkte und prüfst die Tags.
  • Innerhalb des if-Blocks für den Zahlungsstatus prüfen welche Variablen auf true gesetzt sind, und entsprechend die Texte anzeigen.

Hoffe das hilft! :wink:

Dann versuche ich das heute abend mal an entsprechend zu coden und poste das hier, ob das so logisch aufgebaut ist. Lieben Dank!

Hallo @Gabe ,

hier meine Version. Ist das so richtig oder habe ich etwas übersehen?

{%- assign physical = false -%}

{%- assign online = false -%}

{% assign coaching = false -%}

{%- for item in line_items -%}

{%- for tag in item.product.tags -%}

{%- if tag contains “physischeProdukte” -%}

{%- assign physical = true -%}

{%- elsif tag contains “onlinekurs” -%}

{%- assign online = true -%}

{%- elsif tag contains “coaching” -%}

{%- assign coaching = true -%}

{%-endif-%}

{%-endfor-%}

{%-endfor-%}

{%- if order.financial_status == “paid” -%}

{%- if physical -%}

Ihre Sendung wird innerhalb 7-14 Werktagen versendet.

Sie erhalten eine weitere E-Mail, sobald Ihre Bestellung {% if pickup_in_store? %}zur Abholung bereit ist{% else %}versandt wurde{% endif %}.

{% endif %} {% if online %}

Du kannst dein Produkt {{ line_item.product_title }} hier ansehen.
Melde dich hier mit deiner E-Mail Adresse und deiner Bestellnummer {{ name }} an. {% endif %} {% if coaching %}

Jetzt kann es losgehen! Für Teilnehmerinnen des Coaching geht es hier zur Teilnahme.

{% endif %}
{% endif %}

{%- if order.financial_status == “unpaid” -%}

{%- if physical -%}

Vielen Dank für deine Bestellung, bitte überweise den Rechnungsbetrag an Wurst.
Deine Ware wird anschließend versendet.

{% endif %}
{% if online %}

Vielen Dank für deine Bestellung, bitte überweise den Rechnungsbetrag an Wurst.
Nach Zahlungseingang erhältst du deine Kursdaten.

{% endif %} {% if coaching %}

Vielen Dank für deine Bestellung, bitte überweise den Rechnungsbetrag an Wurst.
Anschließend erhältst du einen Link zur Teilnahme an den Zoomterminen.
{% endif %}

{% endif %}

Hey @Nina2020

Hast du das testen können und alle {% und %} Tags mit - ergänzt, um Leerzeichen und Zeilenumbrüche zu entfernen und die Textblöcke direkt hintereinander eingefügt, um unnötige Leerzeilen zu vermeiden so dass die Abfragen und Textblöcke keine überflüssigen Leerzeichen erzeugen?

Hoffe das hilft dir weiter - lass wissen falls nicht! :wink:

Hallo,

ich wollte erstmal fragen, ob der Code so Sinn macht, denn das testen ist aufwendig (weil ich verschiedene Bestellungen aufgeben muss).
Um den whitespace loszuwerden, helfen die Bindestriche nicht. Der ganze Text muss ohne Leerzeichen aneinander gefügt werden, damit der whitespace weg ist. Mir ist eingefallen, dass ich den gleichen Fall mal mit einer html Ebay-Vorlage hatte. Ohne Leerzeichen it auch der white space weg.

Danker dir!

Sieht gut aus Nina…das schaffst du! :wink:

Hallo, habe es lösen können und auch die Sache mit “bezahlt” oder “unbezahlt” kann ich über Orderly lösen. Also, dass eine andere E-Mail rausgeht wenn unbezahlt (pending) oder bezahlt.

Nur, dass der Artikel auf ausgeführt gestellt wird, wenn er den Tag “online” hat nach Kauf und Bezahlung: Das ist noch offen und da komme ich über Shopify Flow derzeit nicht weiter. Ansonsten ist der Workaround so erstmal funktional. Vielen Dank für deine Hilfe!

Gerne! :wink: