if-Anweisungen

Last updated:

Sie können bedingte Logik in Ihre Module und Vorlagen aufnehmen, indem Sie if-Anweisungen und unless-Anweisungen von HubL verwenden. if-Anweisungen enthalten oft von HubL unterstützte Operatoren und können zur Ausführung von Ausdruckstests verwendet werden. 

Bitte beachten: Wenn Sie Personalisierungstoken innerhalb einer bedingten Anweisung Ihres E-Mail-Moduls verwenden, müssen Sie programmierbare E-Mails für das Modul aktivieren.

Informationen, die über die API für Transaktions-E-Mails übermittelt werden, funktionieren nicht innerhalb von if-Anweisungen, da die Vorlagen kompiliert werden, bevor die Informationen ausgefüllt werden.

Grundlegende Syntax der if-Anweisung

HubL verwendet if-Anweisungen, um die Logik einer Vorlage zu definieren. Die Syntax von HubL if-Anweisungen ist der bedingten Logik in Python sehr ähnlich. if-Anweisungen sind in Anweisungstrennzeichen eingeschlossen, beginnend mit einer öffnenden if-Anweisung und mit einer endif-Anweisung am Ende.

Das folgende Beispiel zeigt die grundlegende Syntax einer if-Anweisung, wobei „Bedingung“ durch die boolesche Regel ersetzt wird, die Sie als wahr oder falsch auswerten wollen.

{% if condition %} If the condition is true print this to template. {% endif %}

Nachdem Sie nun die grundlegende Syntax kennengelernt haben, wollen wir uns nun ein paar konkrete Beispiele für einfache if-Anweisungen ansehen. Die folgenden Beispiele zeigen if-Anweisungen, die prüfen, ob ein HubL-Modul mit dem Namen my_module und eine Variable mit dem Namen my_module in einer Vorlage vorhanden sind oder nicht. Beachten Sie, dass ohne jegliche Operatoren die if-Anweisung auswertet, ob das Modul im Kontext der Vorlage definiert ist oder nicht.

{% module "my_module" path="@hubspot/rich_text", label="My rich text module", html="Default module text" export_to_template_context=true %} {% if widget_data.my_module %} A module named "my_module" is defined in this template. {% endif %} {% set my_variable = "A string value for my variable" %} {% if my_variable %} The variable named my_variable is defined in this template. {% endif %}

Beachten Sie, dass bei der Auswertung des HubL-Moduls der Modulname innerhalb der if-Anweisung in Anführungszeichen gesetzt wird und beim Testen der Variablen keine Anführungszeichen um den Variablennamen herum verwendet werden. In beiden obigen Beispielen sind das Modul und die Variable in der Vorlage vorhanden, sodass die Anweisungen so ausgewertet werden, dass das Markup gedruckt wird. Bitte beachten Sie, dass in diesen Beispielen nur getestet wird, ob das Modul und die Variable definiert sind, und nicht, ob sie einen Wert haben oder nicht.

Betrachten wir nun eine if-Anweisung, die auswertet, ob ein Modul einen Wert hat, anstatt auszuwerten, ob es in der Vorlage vorhanden ist. Hierfür müssen wir den Parameter export_to_template_context verwenden. Wenn im folgenden Beispiel der Textbaustein im Content-Editor einen Wert erhält, wird das Markup gedruckt. Wäre das Textfeld des Moduls gelöscht worden, würde kein Markup gerendert. Wenn Sie mit benutzerdefinierten Modulen arbeiten, gibt es eine vereinfachte widget.widget_name-Syntax, die in diesem Beispiel beschrieben wird.

{% module "product_names" path="@hubspot/text", label="Enter the product names that you would like to render the coupon ad for", value="all of our products", export_to_template_context=True %} {% if widget_data.product_names.value %} <div class="coupon-ad"> <h3>For a limited time, get 50% off {{ widget_data.product_names.value}}! </h3> </div> {% endif %} <div class="coupon-ad"> <h3>For a limited time get 50% off all of our products! </h3> </div>

Verwendung von elif und else

if--Anweisungen können mit zusätzlichen bedingten Anweisungen oder mit einer Regel, die ausgeführt wird, wenn die Bedingung oder die Bedingungen falsch sind, weiter verfeinert werden. elif-Anweisungen ermöglichen es Ihnen, zusätzliche Bedingungen zu Ihrer Logik hinzuzufügen, die nach der vorherigen Bedingung ausgewertet werden else-Anweisungen definieren eine Regel, die ausgeführt wird, wenn alle anderen Bedingungen falsch sind. Sie können eine unbegrenzte Anzahl von elif-Anweisungen innerhalb einer einzigen if-Anweisung haben, aber nur eine else-Anweisung.

Im Folgenden finden Sie ein Beispiel für die grundlegende Syntax einer if-Anweisung, die den Operator<= verwendet, um den Wert einer Variablen zu überprüfen. In diesem Beispiel würde die Vorlage Folgendes ausgeben: „Die angegebene Zahl der Variablen ist kleiner als oder gleich 6.“

{% set number = 5 %} {% if number <= 2 %} Variable named number is less than or equal to 2. {% elif number <= 4 %} Variable named number is less than or equal to 4. {% elif number <= 6 %} Variable named number is less than or equal to 6. {% else %} Variable named number is greater than 6. {% endif %}

Nachfolgend ein weiteres Beispiel, bei dem ein Auswahlmodul verwendet wird, um verschiedene Überschriften für eine Karriereseite auf der Grundlage der vom Benutzer gewählten Abteilung darzustellen. Das Beispiel verwendet den Operator ==, um auf bestimmte vordefinierte Werte im Auswahlmodul zu überprüfen. 

{% choice "department" label="Choose department", value="Marketing", choices="Marketing, Sales, Dev, Services" export_to_template_context=True %} {% if widget_data.department.value == "Marketing" %} <h3>Want to join our amazing Marketing team?!</h3> <h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4> {% elif widget_data.department.value == "Sales" %} <h3>Are you a Sales superstar?</h3> <h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4> {% elif widget_data.department.value == "Dev" %} <h3>Do you love to ship code?</h3> <h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4> {% else %} <h3>Want to work with our awesome customers?</h3> <h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4> {% endif %}

unless-Anweisungen

unless-Anweisungen sind genau wie if-Anweisungen konditional, funktionieren aber nach der umgekehrten Logik. Der Code zwischen dem öffnenden und dem schließenden Tag wird gerendert und kompiliert, es sei denn, die einzelne boolesche Bedingung wird zu true ausgewertet. unless-Anweisungen beginnen mit einem unless und enden mit einem endunless .unless-Anweisungen unterstützen else, aber nicht elif.

Nachfolgend ein Beispiel, bei dem die Überschrift „Wartungsarbeiten“ ausgegeben wird, sofern das Rich-Text-Feld keinen Wert erhält. Wenn das Rich-Text-Feld über Inhalt verfügt, wird dieser Inhalt angezeigt.

{% module "my_page_content" path="@hubspot/rich_text", label="Enter your page content", html="" export_to_template_context=true %} {{ widget_data.my_page_content.html }} {% unless widget_data.my_page_content.html %} <h1>This page is under construction.</h1> <h3>Come back soon!</h3> {% endunless %}

ifchanged

Zusätzlich zu if- und unless-Anweisungen unterstützt HubL ifchanged-Anweisungen. Diese Anweisungen können verwendet werden, um Markup nur dann zu rendern, wenn sich eine Variable seit einem früheren Aufruf dieses Tags geändert hat.

Inline-if-Anweisungen

HubL unterstützt inline if--Anweisungen. Diese können verwendet werden, um bedingte Logik knapp und gut verständlich mit Operatoren und Ausdruckstests zu schreiben.
{% set color = "Blue" if is_blue is truthy else "Red" %} // color == "blue" {{ "Blue" if is_blue is truthy else "Red" }} // "Blue" {% set dl = true %} <a href="http://example.com/some.pdf" {{"download" if dl }} >Download PDF</a>

Ternäre Operatoren

Es ist auch möglich, ternäre Operatoren zu verwenden, um schnell bedingte Logik mit Operatoren und Ausdruckstests zu schreiben.
// If the variable is_blue is true, output "blue", otherwise output"red" {{ is_blue is truthy ? "blue" : "red" }} // Set the variable is_red to false if is_blue is true, otherwise set to true {% set is_red = is_blue is truthy ? false : true %}

War dieser Artikel hilfreich?
Dieses Formular dient dazu, Feedback zu unserer Entwicklerdokumentation zu sammeln. Wenn Sie uns Ihre Meinung zu HubSpot-Produkten mitteilen möchten, teilen Sie diese bitte im Ideenforum der Community.