<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Twig on besserentwickeln.de</title><link>https://besserentwickeln.de/tags/twig/</link><description>Recent content in Twig on besserentwickeln.de</description><generator>Hugo -- gohugo.io</generator><language>de</language><copyright>Philipp Tuchardt</copyright><lastBuildDate>Thu, 13 Mar 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://besserentwickeln.de/tags/twig/index.xml" rel="self" type="application/rss+xml"/><item><title>Twig Macros</title><link>https://besserentwickeln.de/p/twig-macros/</link><pubDate>Thu, 13 Mar 2025 00:00:00 +0000</pubDate><guid>https://besserentwickeln.de/p/twig-macros/</guid><description>&lt;h1 id="eine-einsteiger-anleitung-zu-twig-macros">Eine Einsteiger-Anleitung zu Twig Macros
&lt;/h1>&lt;h2 id="was-sind-twig-macros">Was sind Twig Macros?
&lt;/h2>&lt;p>Twig Macros sind wiederverwendbare Funktionen innerhalb von Twig-Templates. Sie helfen dabei, Code zu vereinfachen, indem sie Wiederholungen reduzieren und die Wartbarkeit verbessern – ähnlich wie Funktionen in Programmiersprachen.&lt;/p>
&lt;h2 id="ein-macro-definieren">Ein Macro definieren
&lt;/h2>&lt;p>Ein Twig Macro wird mit dem Tag &lt;code>{% macro %}&lt;/code> definiert. Es kann, genau wie eine Funktion, Parameter entgegennehmen.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-twig" data-lang="twig">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">{%&lt;/span> &lt;span class="k">macro&lt;/span> &lt;span class="nv">button&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">text&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="nv">url&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="nv">class&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="cp">%}&lt;/span>&lt;span class="x">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="x"> &amp;lt;a href=&amp;#34;&lt;/span>&lt;span class="cp">{{&lt;/span> &lt;span class="nv">url&lt;/span> &lt;span class="cp">}}&lt;/span>&lt;span class="x">&amp;#34; class=&amp;#34;btn &lt;/span>&lt;span class="cp">{{&lt;/span> &lt;span class="nv">class&lt;/span> &lt;span class="cp">}}&lt;/span>&lt;span class="x">&amp;#34;&amp;gt;&lt;/span>&lt;span class="cp">{{&lt;/span> &lt;span class="nv">text&lt;/span> &lt;span class="cp">}}&lt;/span>&lt;span class="x">&amp;lt;/a&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="x">&lt;/span>&lt;span class="cp">{%&lt;/span> &lt;span class="k">endmacro&lt;/span> &lt;span class="cp">%}&lt;/span>&lt;span class="x">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Dieses Macro erzeugt eine Button-Komponente, die mehrfach mit unterschiedlichen Werten wiederverwendet werden kann.&lt;/p>
&lt;h2 id="macros-im-selben-template-verwenden">Macros im selben Template verwenden
&lt;/h2>&lt;p>Auch innerhalb der Datei, in der das Macro definiert ist, muss es zuerst importiert werden.
&lt;code>{% import _self as macros %}&lt;/code> macht die eigenen Macros unter dem Namespace &lt;code>macros&lt;/code> verfügbar:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-twig" data-lang="twig">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">{%&lt;/span> &lt;span class="k">import&lt;/span> &lt;span class="nv">_self&lt;/span> &lt;span class="nv">as&lt;/span> &lt;span class="nv">macros&lt;/span> &lt;span class="cp">%}&lt;/span>&lt;span class="x">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="x">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="x">&lt;/span>&lt;span class="cp">{{&lt;/span> &lt;span class="nv">macros.button&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s1">&amp;#39;Click me&amp;#39;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="s1">&amp;#39;https://example.com&amp;#39;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="s1">&amp;#39;btn-primary&amp;#39;&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="cp">}}&lt;/span>&lt;span class="x">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;blockquote>
&lt;p>Der frühere Aufruf über &lt;code>{{ _self.button(...) }}&lt;/code> ist seit Twig 2.11 veraltet und
funktioniert in Twig 3 (und damit in aktuellen Symfony-/Shopware-Versionen) nicht mehr.&lt;/p>&lt;/blockquote>
&lt;h2 id="macros-in-einer-separaten-datei-speichern">Macros in einer separaten Datei speichern
&lt;/h2>&lt;p>Für eine bessere Organisation können Macros in einer separaten Datei (z. B. &lt;code>macros.twig&lt;/code>) gespeichert und bei Bedarf importiert werden.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-twig" data-lang="twig">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">{%&lt;/span> &lt;span class="k">import&lt;/span> &lt;span class="s1">&amp;#39;macros.twig&amp;#39;&lt;/span> &lt;span class="nv">as&lt;/span> &lt;span class="nv">macros&lt;/span> &lt;span class="cp">%}&lt;/span>&lt;span class="x">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="x">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="x">&lt;/span>&lt;span class="cp">{{&lt;/span> &lt;span class="nv">macros.button&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s1">&amp;#39;Learn More&amp;#39;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="s1">&amp;#39;https://example.com&amp;#39;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="s1">&amp;#39;btn-secondary&amp;#39;&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="cp">}}&lt;/span>&lt;span class="x">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="vorteile-von-twig-macros">Vorteile von Twig Macros
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Code-Wiederverwendung&lt;/strong>: Vermeidet das Duplizieren gleicher Strukturen.&lt;/li>
&lt;li>&lt;strong>Bessere Lesbarkeit&lt;/strong>: Hält Templates sauberer und strukturierter.&lt;/li>
&lt;li>&lt;strong>Einfache Wartung&lt;/strong>: Macros einmal aktualisieren und die Änderungen überall übernehmen.&lt;/li>
&lt;/ul></description></item><item><title>Twig If-Bedingung kurz geschrieben</title><link>https://besserentwickeln.de/n/twig-if-bedingung-kurz-geschrieben/</link><pubDate>Tue, 21 Jan 2025 00:00:00 +0000</pubDate><guid>https://besserentwickeln.de/n/twig-if-bedingung-kurz-geschrieben/</guid><description>&lt;p>Lange Version&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-twig" data-lang="twig">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">{%&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="nv">category.translated.customFields.my_custom_field&lt;/span> &lt;span class="k">or&lt;/span> &lt;span class="nv">category.translated.customFields.my_custom_field&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="kp">false&lt;/span> &lt;span class="cp">%}&lt;/span>&lt;span class="x">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Kurze Version&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-twig" data-lang="twig">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">{{&lt;/span> &lt;span class="nv">category.translated.customFields.my_custom_field&lt;/span> &lt;span class="o">??&lt;/span> &lt;span class="kp">false&lt;/span> &lt;span class="o">?&lt;/span> &lt;span class="s1">&amp;#39;foo&amp;#39;&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;bar&amp;#39;&lt;/span> &lt;span class="cp">}}&lt;/span>&lt;span class="x">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>Twig: Block aus Datei einbinden</title><link>https://besserentwickeln.de/n/twig-block-aus-datei-einbinden/</link><pubDate>Fri, 17 Jan 2025 00:00:00 +0000</pubDate><guid>https://besserentwickeln.de/n/twig-block-aus-datei-einbinden/</guid><description>&lt;p>Beispiel&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-twig" data-lang="twig">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">{{&lt;/span> &lt;span class="nb">block&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s1">&amp;#39;my_cool_block&amp;#39;&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="s1">&amp;#39;@Storefront/path/to/my/file.html.twig&amp;#39;&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="cp">}}&lt;/span>&lt;span class="x">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item></channel></rss>