• Wenn du hier im Forum ein neues Thema erstellst, sind schon Punkte aufgeführt die du ausfüllen musst. Das dient im Allgemeinen dazu die notwendigen Informationen direkt mit der Frage bereitzustellen.
    Da in letzter Zeit immer wieder gerne das Formular gelöscht wurde und erst nach 3 Seiten Nachfragen die benötigten Infos für eine Hilfe kommen, werde ich nun jede Fragestellung die nicht einmal annähernd das Formular benutzt, sofort in den Sondermüll schicken.
    Füllt einfach die abgefragte Daten aus und alle können euch viel schneller helfen.

XF2.1 Fragen zu Macros

McAtze

Administrator
Lizenzinhaber
Registriert
30. Apr. 2011
Beiträge
6.107
Punkte
523
XF Version
  1. 2.3 Beta
XF Instanz
Hosting
PHP-Version
8.3.4
MySQL/MariaDB
10.11
Provider/Hoster
Netcup
Ich habe in den Optionen mehrere Checkboxen angelegt hinter denen dann eine Textarea liegt. Wenn Checkbox aktiv, kann Textarea ausgefüllt werden. Nun sind dies ca. 50 Stück und ich möchte dies gerne in ein Template übernehmen. Hier kommen noch ein paar zusätzliche Abfragen hinzu:

1. WENN checkbox aktiv UND textarea ausgefüllt DANN textarea
2. SONST WENN checkbox aktiv UND textarea NICHT ausgefüllt DANN phrase

Das ist dann ein schöner 5-zeiler pro Checkbox. Macht bei 50 Checkboxen knapp 250 Zeilen ohne Leerzeilen.

Nun zu meiner eigentlichen Frage: Kann ich dies mit der neuen Macro-Funktion irgendwie sauberer lösen?

Ich steige bei der Funktion noch nicht so ganz durch, vor allem was die Argumente angeht.

Danke schon einmal für die Hilfe.. :D
 
Ja das geht mit dem Makros sehr schön, ich weiß nur gerade nicht wie man das Schriftlich schön rüber bringen kann.
Du hast z.B. das Makro:
Code:
<xf:macro
   name="my_macro_name"
   arg-message="My amazing macro message!">

   <h1>Message</h1>
   <p>{$message}</p>

</xf:macro>

dann würde jedes mal wenn du folgendes aufrufst, das oben stehende ausgegeben werden, mit "My amazing macro message!" als Inhalt der Variable:
Code:
<xf:macro name="my_macro_name" />

Wenn du aber jetzt folgendes aufrufst, dann überschreibst du quasi die Variable:
Code:
<xf:macro name="my_macro_name" arg-message="test" />

Dann würde jetzt Test bei dem Makro oben ausgegeben werden.
 
Wie oben geschrieben habe ich ca. 50 Textarea die in den Einstellungen gefüllt werden können, d.h. dann könnten ich bei den Macros so ungefähr vorgehen:
HTML:
<xf:macro
    name="my_macro_name"
    arg-option1="$xf.options.my_option_id1"
    arg-option2="$xf.options.my_option_id2"
    arg-option3="$xf.options.my_option_id3"
    arg-option4="$xf.options.my_option_id4">

    <p>{$for_every_arg_???}</p>

</xf:macro>

HTML:
<xf:macro template="my_macro_template" name="my_macro_name" arg-argName="option1" />
<xf:macro template="my_macro_template" name="my_macro_name" arg-argName="option2" />
<xf:macro template="my_macro_template" name="my_macro_name" arg-argName="option3" />
<xf:macro template="my_macro_template" name="my_macro_name" arg-argName="option4" />

Was erreiche ich denn eigentlich hiermit?
HTML:
<xf:macro template="my_macro_template" name="my_macro_name" arg-argName="!" />

Das hat sich wohl erledigt, wer lesen kann.. :rolleyes:
Sometimes it's necessary to mark an argument as required. This can be done by setting the argument value to ! in the macro definition.
 
@McAtze ne su schreibst das eher so, ich setz das immer ans ende vom template:
HTML:
<xf:macro
   name="my_checkboxes"
   arg-label=""
   arg-explain=""
   arg-name=""
   arg-checked="false">
       <xf:checkboxrow label="{$label}" explain="{$explain}">
           <xf:option name="{$name}" label="{$label}" checked="{$checked}" />
       </xf:checkboxrow>
</xf:macro>

und aufrufen tust du das ganze dann folgendermaßen:
HTML:
<xf:macro name="my_checkboxes"arg-label="label1" arg-explain="explain1" arg-name="name1" arg-checked="false" />
<xf:macro name="my_checkboxes"arg-label="label2" arg-explain="explain2" arg-name="name2" arg-checked="false" />
<xf:macro name="my_checkboxes"arg-label="label3" arg-explain="explain3" arg-name="name3" arg-checked="false" />
 
Das muss ich mal ausprobieren.. :good2:
 
Ok - und wozu brauch man oder kann man die Macros brauchen? (Man merkt ja fast gar nicht, das ich immer noch mit 1.5.x unterwegs bin :D ;) )
 
Was ich bisher verstanden habe ist, dass das mit include vergleichbar ist, du aber Argumente templateübergreifend nutzen kannst. Also ein echter Fortschritt.
 
Na wenn ich 2020, wenn das DE Sprachpaket fertig ist (muhahaha... :D ;) ) update, werd ich mich da wohl mal ne Weile mit beschäftigen, klingt aber interessant. :)
 
Macros haben gegenüber includes 2 Vorteile:
Die Parameter sind sauber gekapselt, d.h. man versaut nicht versehentlich den Namespace des Parent.
Darüber hinaus sind Macros nur Funktionen und keine eigenständigen Dateien was einen geringen Petformance-Vorteil bringt da man so weniger include()-calls hat.
 
Zuletzt bearbeitet:
Zurück
Oben