Seite 1 von 1

Recursives Smarty-Template mit abschließendem Code

Verfasst: Mi 22. Jan 2014, 22:32
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

Re: Recursives Smarty-Template mit abschließendem Code

Verfasst: Fr 24. Jan 2014, 20:14
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

Re: Recursives Smarty-Template mit abschließendem Code

Verfasst: Mo 27. Jan 2014, 18:32
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

Re: Recursives Smarty-Template mit abschließendem Code

Verfasst: Mo 27. Jan 2014, 22:22
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

Re: Recursives Smarty-Template mit abschließendem Code

Verfasst: Di 28. Jan 2014, 11:17
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

Re: Recursives Smarty-Template mit abschließendem Code

Verfasst: Di 28. Jan 2014, 20:49
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

Re: Recursives Smarty-Template mit abschließendem Code

Verfasst: Di 28. Jan 2014, 21:31
von rzwei
Super!!!,
beide Varianten funktionieren.
Das ist es, was ich gesucht habe!

Vielen Dank!