Recursives Smarty-Template mit abschließendem Code

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
rzwei
Beiträge: 65
Registriert: Mo 28. Feb 2005, 17:02
Wohnort: Isartal
Kontaktdaten:

Recursives Smarty-Template mit abschließendem Code

Beitrag von rzwei »

Hallo,
ich möchte für ein Modul in einer Art Artikelliste ein Smarty_Template ähnlich wie im Modul "Navigation_main" rekursiv durchlaufen.
Das funktioniert auch. Aber:
Wie schaffe ich es, dass nach dem allerletzten Durchlauf durch das Template noch ein abschließender Code ausgegeben werden kann.
Da muss es doch irgendeine (if)-Konstruktion geben, oder?
Würde mich freuen, wenn mir da jemand helfen kann.

Vielen Dank,
Mathias
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Re: Recursives Smarty-Template mit abschließendem Code

Beitrag von xmurrix »

Hallo rzwei,

irgendwo fängst du ja initial an, z. B. durch Aufruf einer Funktion und diese Funktion ruft sich selber rekursiv auf, bis es die Aufgabe erledigt hat.

Du kanst dann nach dem Funktionsaufruf den abschließenden Code ausführen...

Code: Alles auswählen

meineRekursiveFunktionDieSichSelberAufruft();

// Hier der Code, der abschließend ausgeführt wird...
Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
rzwei
Beiträge: 65
Registriert: Mo 28. Feb 2005, 17:02
Wohnort: Isartal
Kontaktdaten:

Re: Recursives Smarty-Template mit abschließendem Code

Beitrag von rzwei »

Hallo murrix,

aber genau das funktioniert nicht:

Code: Alles auswählen

<!-- projekt--stellenangebot/template/get.tpl -->
{if $tree}
    {* loop categories *}
    {foreach from=$tree item=wrapper name=catlist}
		{if $wrapper.level == 1}
			<h3><br />{$wrapper.item->get('name')} </h3>
		{else}
			{assign var="value" value=$wrapper.item->get('idcat')}
			{assign var="name" value=$wrapper.item->get('name')}
			{if $value|in_array:$choosen_target}
				{$checked = 'checked="checked"'}
			{else}
				{$checked = ''}
			{/if}
		<input type="checkbox" name="choosen_target[]" class="target_class" value="{$value}" {$checked}>{$name}<br />
		{/if}
		
		{include file="projekt--stellenangebot/template/get.tpl"
						tree=$wrapper.subcats path=$path level=$wrapper.level name=sub}
     {/foreach}
{/if}
<input type="submit" id="create_linkfields" value="Absenden"/>
Der abschließende input-Button erscheint nach jedem Durchlauf der Schleife.

Viele Grüße
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Re: Recursives Smarty-Template mit abschließendem Code

Beitrag von xmurrix »

Includierst du etwa am Ende der Schleife nochmal das Template selber?

Falls ja, dann hast du da die Template-Variable name (name=sub).

Kannst also in deinem Template ermitteln, ob es als Subtemplate ausgeführt wird oder nicht, folgendes sollte funktionieren:

Code: Alles auswählen

{if $name && $name != 'sub'}
    <input type="submit" id="create_linkfields" value="Absenden"/>
{/if}
Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
rzwei
Beiträge: 65
Registriert: Mo 28. Feb 2005, 17:02
Wohnort: Isartal
Kontaktdaten:

Re: Recursives Smarty-Template mit abschließendem Code

Beitrag von rzwei »

Ja, ich includiere das Template selbst. Das wird beim Beispielmandanten bei der Navigation oder der Sitemap auch so gemacht.
Die Idee mit der Abfrage des Namens hatte ich auch schon. Dann kommt gar kein input-Tag, d.h. die if-Bedingung wird nicht erreicht:

Code: Alles auswählen

<!-- projekt--stellenangebot/template/get.tpl -->
{if $tree}
    {* loop categories *}
    {foreach from=$tree item=wrapper name=catlist}
		{if $wrapper.level == 1}
			<h3><br />{$wrapper.item->get('name')} </h3>
		{else}
			{assign var="value" value=$wrapper.item->get('idcat')}
			{assign var="catname" value=$wrapper.item->get('name')}
			{if $value|in_array:$choosen_target}
				{$checked = 'checked="checked"'}
			{else}
				{$checked = ''}
			{/if}
		<input type="checkbox" name="choosen_target[]" class="target_class" value="{$value}" {$checked}>{$catname}<br />
		{/if}
		
		{include file="projekt--stellenangebot/template/get.tpl"
						tree=$wrapper.subcats path=$path level=$wrapper.level name=sub}
     {/foreach}
{/if}
{if $name && $name != 'sub'}
    <input type="submit" id="create_linkfields" value="Absenden"/>
{/if}
Grüße
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Re: Recursives Smarty-Template mit abschließendem Code

Beitrag von xmurrix »

Entweder übergibst du in der Modulausgabe einen initialen Wert für "name" und überprüfst diesen Wert im Template

Code: Alles auswählen

// Modulausgabe
$smarty->assign('name', 'root');

// Im Template
{if $name && $name == 'root'}
    <input type="submit" id="create_linkfields" value="Absenden"/>
{/if}
oder du übergibst initial keinen Wert in der Modulausgabe, dann machst du im Template folgende Prüfung

Code: Alles auswählen

// Im Template
{if !$name}
    <input type="submit" id="create_linkfields" value="Absenden"/>
{/if}
Das kommt halt darauf an, was genau für einen initialen Wert die Variable $name im Template hat. In Subtemplates hat es den Wert "sub"...

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
rzwei
Beiträge: 65
Registriert: Mo 28. Feb 2005, 17:02
Wohnort: Isartal
Kontaktdaten:

Re: Recursives Smarty-Template mit abschließendem Code

Beitrag von rzwei »

Super!!!,
beide Varianten funktionieren.
Das ist es, was ich gesucht habe!

Vielen Dank!
Antworten