Ersetzung von DEFINE durch Twig syntax

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
IMC
Mitglied
Beiträge: 544
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Ersetzung von DEFINE durch Twig syntax

Beitrag von IMC »

Ich möchte diesen Code durch Twig ersetzen,

Code: Alles auswählen

	{% if not definition.INCLUDED_TEST %}
		test
		{% DEFINE INCLUDED_TEST = true %}
	{% endif %}
Dieser Code funktioniert nicht so wie der erste.

Code: Alles auswählen

	{% if INCLUDED_TEST is empty %}
		foo
		{% set INCLUDED_TEST = 'true' %}
	{% endif %}
Wenn das EVENT mehrfach auf der Seite vorkommt ist die Variable bei jedem neuen Aufruf leer und es gibt eine Textausgabe.
Gruß, Thorsten
Benutzeravatar
Mike-on-Tour
Supporter
Supporter
Beiträge: 1076
Registriert: 13.01.2020 21:09
Kontaktdaten:

Re: Ersetzung von DEFINE durch Twig syntax

Beitrag von Mike-on-Tour »

Laut der Twig-Dokumentation kann das nicht funktionieren, weil dort steht:
empty checks if a variable is an empty string, an empty array, an empty hash, exactly false, or exactly null.
Da die Variable aber beim Ausruf nicht exakt false ist, wird das wohl zu wahr ausgewertet und der Text ausgegeben.

Was aber funktioniert (das verwende ich bei der ein oder anderen meiner Exts) ist folgendes, denn nicht gesetzte Variablen wertet Twig zu false aus:

Code: Alles auswählen

	{% if !INCLUDED_TEST %}
		foo
		{% set INCLUDED_TEST = 'true' %}
	{% endif %}
Habe das gerade zweimal in einem Template reinkopiert, dieses aufgerufen und es wird nur einmal die Textausgabe gemacht.
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2130
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: Ersetzung von DEFINE durch Twig syntax

Beitrag von LukeWCS »

Mahlzeit Thorsten

Geht es dir übrigens um ein Projekt ausserhalb von phpBB? Wenn nicht, wäre die Bastelstube der richtige Rahmen und ich würde verschieben.
IMC hat geschrieben: 15.12.2023 03:20 Ich möchte diesen Code durch Twig ersetzen,
Kurz: Geht nicht, das ist bereits Twig. :wink: Genauer gesagt phpBB-Twig.

Lang:

definition. ist ein globales Objekt das von phpBB erzeugt wird, eben damit wir globale Twig Variablen definieren können.
{% DEFINE ist eine phpBB Erweiterung für Twig und somit auch nur bei phpBB vorhanden.
Wenn das EVENT mehrfach auf der Seite vorkommt ist die Variable bei jedem neuen Aufruf leer und es gibt eine Textausgabe.
Zwangsläufig, weil {% set einen lokalen Scope hat. Das heisst das gilt ausschliesslich in dem/der Template/Datei wo das notiert wurde. Ausnahmen sind weitere Templates die wir mit {% INCLUDE einbinden, denn da wird der lokale Scope quasi weitergereicht. Aber da sind wir dann schon im Bereich "Vererbung".

Wenn du also in Template A {% set verwendest, dann "weiss" Template B absolut nichts von INCLUDED_TEST. Salopp formuliert: Die Variable INCLUDED_TEST die in A definiert wurde, ist "Eigentum" von Template A und geht Template B einen feuchten Kehricht an. :D
Möge das Backup mit dir sein. Immer.

Erweiterungen - Infos zur artgerechten Haltung
phpBB Ext Check - Analysesystem für phpBB Erweiterungen (Entwickler Werkzeug)
Benutzeravatar
IMC
Mitglied
Beiträge: 544
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: Ersetzung von DEFINE durch Twig syntax

Beitrag von IMC »

Danke für eure Antworten.
LukeWCS hat geschrieben: 15.12.2023 12:04 Geht es dir übrigens um ein Projekt ausserhalb von phpBB? Wenn nicht, wäre die Bastelstube der richtige Rahmen und ich würde verschieben.
Ist phpBB, aber kein spezielles Projekt
LukeWCS hat geschrieben: 15.12.2023 12:04 Kurz: Geht nicht, das ist bereits Twig. :wink: Genauer gesagt phpBB-Twig.
Hatte ich mir schon gedacht.
LukeWCS hat geschrieben: 15.12.2023 12:04 Lang:
Danke für die verständliche Erklärung.
Bis Gestern hatte ich gedacht das sich der Namensraum auf die generierte Seite erstreckt und nicht nur auf das einzelne Template.
phpBB hat zum Ausgleiche das Globale Objekt. Tatsächlich hatte ich erwartet dass Twig von sich aus Globale Variablen händeln kann.

Wieder etwas dazugelernt.
Gruß, Thorsten
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2130
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: Ersetzung von DEFINE durch Twig syntax

Beitrag von LukeWCS »

IMC hat geschrieben: 15.12.2023 15:49 Tatsächlich hatte ich erwartet dass Twig von sich aus Globale Variablen händeln kann.
Dem ist nicht so, jedenfalls nicht Vanillla. Das muss Twig explizit beigebracht werden, phpBB macht das eben über definition..

Nur um das zu präzisieren: Ich hatte ja geschrieben von Template A und B, also wenn es 2 separate Templates sind. Das gilt aber genauso wenn dasselbe Template mehrfach aufgerufen wird. Templates kann man als separate "Instanzen" betrachten. Eine lokale Variable die beim ersten Aufruf (Instanz A) eines Templates gesetzt wird, ist beim zweiten Aufruf (Instanz B) des gleichen Templates nicht mehr existent.

Beispiel Toggle Control:

Die Template Variable TOGGLECTRL_TYPE liegt im globalen Scope und hat deshalb das Präfix TOGGLECTRL_ wie alle Variablen bei TC, die in einem globalen Scope liegen. Ich verwende konsequent ein Präfix bei Namen von globalen Variablen, um Kollisionen mit phpBB und anderen Exts zu vermeiden. Leider ist vielen Ext Codern nicht bewusst, dass sie mit globalen Scopes hantieren.

Dagegen habe ich bei der Template Variable switch_type kein Präfix verwendet, weil sie im lokalen Scope definiert wird. Und das entspricht dann wieder deinem zweiten Code.
Möge das Backup mit dir sein. Immer.

Erweiterungen - Infos zur artgerechten Haltung
phpBB Ext Check - Analysesystem für phpBB Erweiterungen (Entwickler Werkzeug)
Antworten

Zurück zu „Coding & Technik“