# [SMARTY] Funktion in Smarty-Variable laden



## mammuteffect (27. Januar 2007)

Hallo,
ich habe mal wieder ein kleines Problem:
In meiner PHP-Datei lade ich eine Datei funktionen.php (per require) und weiße anschließend eine Funktion aus dieser Datei einer Smarty-Variable zu. Diese will ich dann SPÄTER in der tpl-Datei aufrufen.
Mein Problem ist aber, dass er sie sofort beim zuweisen in die Variable ausführt und sie dadurch gleich am Anfang ausgeführt wird und ganz oben auf der Seite steht.
Wie lässt sich dieser Fehler beheben?
Vielen Dank,

effect


----------



## cameeel (27. Januar 2007)

Ich bin mir nicht sicher ob ich dich richtig verstanden habe, aber ich denke du wirst dir einfach ein eigenes Smarty-Plugin schreiben müssen 

cAm3eel.


----------



## mammuteffect (27. Januar 2007)

Also die Funktion, die ich einfüge, ist die Darstellung der Navigationsleiste. Ist so ein PlugIn dafür geeignet?


----------



## cameeel (28. Januar 2007)

Also für eine Navi brauchst du kein Plugin. Die Navi kannst du in ein Array laden und dann über Smarty ausgeben. Z.B. mit einer while/for Schleife...

cAm3eel.


----------



## mammuteffect (28. Januar 2007)

Da ist aber auch die komplette Useranmeldung drin usw..

Ich verstehe es sowieso nicht, warum er es bei der Zuweisung gleich alles anzeigt


----------



## cameeel (28. Januar 2007)

Zeig uns mal ein bischen was von deinem PHP/Template Quellcode, damit dürften wir wahrscheinlich mehr anfangen können 

cAm3eel.


----------



## mammuteffect (28. Januar 2007)

Da kannst du Recht haben 

Auszug aus funktionen.php:


```
function navigationlinks()
{
?>
	<table CELLSPACING="0" CELLPADDING="0" border="0" width="140">
		<tr>
			<td height="30" WIDTH=140 background=/gfx/menu/menu_ueberschrift_nav.jpg COLSPAN=3>
			</td>
		</tr>
		<tr>
			<td Height=1 Width=140>
			</td>
		</tr>
		<tr>
			<td Height=4 Width=140 background="/gfx/menu/nav_cen_top.jpg">
			</td>
		</tr>
		<tr>
			<td width="100" valign="top" background="/gfx/menu/nav_cen_cen.jpg">
				<table CELLSPACING="0" CELLPADDING="0" border="0" width="140">
					<tr>
						<td COLSPAN=2 WIDTH=140 HEIGHT=20 background="/gfx/menu/nav_left_zwischen1.jpg" align=center><div class=navleftzwischen>Allgemein</div></td>
						</td>
					</tr>
					<tr>
						<td COLSPAN=2 WIDTH=140 HEIGHT=2>
						</td>
					</tr>
					<tr>
						<td WIDTH=10>
						</td>
						<td> 
							<left><div class=navleftpfeil>» <a href="/index.php" class=navleft>News</a></div></left>
						</td>
					</tr>
					<tr>
						<td WIDTH=10>
						</td>
						<td> 
							<left><div class=navleftpfeil>» <a target=_blank href="http://esv-hagenow.foren-city.de" class=navleft>Forum </a></div></left>
						</td>
					</tr>
					<tr>
						<td WIDTH=10>
						</td>
						<td> 
							<left><div class=navleftpfeil>» <a href="/guestbook.php" class=navleft>Gästebuch</a></div></left>
						</td>
					</tr>
					<tr>
						<td COLSPAN=2 WIDTH=140 HEIGHT=5>
						</td>
					</tr>
					<tr>
						<td COLSPAN=2 WIDTH=140 HEIGHT=20 background="/gfx/menu/nav_left_zwischen2.jpg" align=center><div class=navleftzwischen>Abteilungen</div></td>
						</td>
					</tr>
					<tr>
						<td COLSPAN=2 WIDTH=140 HEIGHT=2>
						</td>
					</tr>
					<tr>
						<td WIDTH=10>
						</td>
						<td> 
							<left><div class=navleftpfeil>» <a href="/abteilungen.php?abt=fussball" class=navleft>Fußball</a></div></left>
						</td>
					</tr>
					<tr>
						<td WIDTH=10>
						</td>
						<td> 
							<left><div class=navleftpfeil>» <a href="/abteilungen.php?abt=handball" class=navleft>Handball</a></div></left>
						</td>
					</tr>
					<tr>
						<td WIDTH=10>
						</td>
						<td> 
							<left><div class=navleftpfeil>» <a href="/index.php" class=navleft>Tischtennis</a></div></left>
						</td>
					</tr>
					<tr>
						<td WIDTH=10>
						</td>
						<td> 
							<left><div class=navleftpfeil>» <a href="/index.php" class=navleft>Kegeln</a></div></left>
						</td>
					</tr>
					<tr>
						<td WIDTH=10>
						</td>
						<td> 
							<left><div class=navleftpfeil>» <a href="/index.php" class=navleft>Leichtathletik</a></div></left>
						</td>
					</tr>
					<tr>
						<td COLSPAN=2 WIDTH=140 HEIGHT=5>
						</td>
					</tr>
					<tr>
						<td COLSPAN=2 WIDTH=140 HEIGHT=20 background="/gfx/menu/nav_left_zwischen2.jpg" align=center><div class=navleftzwischen>Verschiedenes</div></td>
						</td>
					</tr>
					<tr>
						<td WIDTH=10>
						</td>
						<td> 
							<left><div class=navleftpfeil>» <a href="/contact.php" class=navleft>Kontakt</a></div></left>
						</td>
					</tr>
					<tr>
						<td WIDTH=10>
						</td>
						<td> 
							<left><div class=navleftpfeil>» <a href="/contact.php?show=bug" class=navleft>Bugreport</a></div></left>
						</td>
					</tr>
					<tr>
						<td WIDTH=10>
						</td>
						<td> 
							<left><div class=navleftpfeil>» <a href="/impressum.php" class=navleft>Impressum</a></div></left>
						</td>
					</tr>
				</table>
			</td>
		</tr>
		<tr>
			<td Height=4 Width=140 background="/gfx/menu/nav_cen_bot.jpg">
			</td>
		</tr>
		<tr>
			<td Height=10 Width=140>
			</td>
		</tr>
		<tr>
			<td WIDTH=140 HEIGHT=30 background="/gfx/menu/menu_ueberschrift_upcoming.jpg">
			</td>
		</tr>
		<tr>
			<td Height=1 Width=140>
			</td>
		</tr>
		<tr>
			<td Height=4 Width=140 background="/gfx/menu/nav_cen_top.jpg">
			</td>
		</tr>
		<tr>
			<td Height=1 Width=140 background="/gfx/menu/nav_cen_cen.jpg">
				<table CELLSPACING="0" CELLPADDING="0" border="0" width="140">
					<tr>
						<td style="padding: 0 0 0 10px;">
							<?php
							
							$sql_gamescon="SELECT id, datum FROM games WHERE gespielt=0";
							$result_gamescon = mysql_query($sql_gamescon);
							$temp_gamescon=mysql_num_rows($result_gamescon);
	
							for($i=0;$i<$temp_gamescon;$i++)
								{ $ergebnis_gamescon[$i]=mysql_fetch_array($result_gamescon); }
							for($i=0;$i<count($ergebnis_gamescon);$i++)
								{
								if($ergebnis_gamescon[$i][datum]<=time()) 
									{ 
									$sql_gamesup="UPDATE games SET `gespielt`=1 WHERE `id`=".$ergebnis_gamescon[$i][id];
									mysql_query($sql_gamesup);
									}		
								}			

							$sql_upcoming = "SELECT id, spiel, klasse, gegner, datum, ort FROM games WHERE gespielt=0 ORDER BY datum LIMIT 5";
							$result_ergebnis_upcoming = mysql_query($sql_upcoming);
							
							$temp_ergebnis_upcoming=mysql_num_rows($result_ergebnis_upcoming);
	
							for($i=0;$i<$temp_ergebnis_upcoming;$i++)
								{ $ergebnis_upcoming[$i]=mysql_fetch_array($result_ergebnis_upcoming); }

						
							if(!empty($ergebnis_upcoming))
								{
								for($i=0;$i<$temp_ergebnis_upcoming;$i++)
									{
									$temp_upcoming_date=date("D, d.m.Y - H:i", $ergebnis_upcoming[$i][datum]);
																
									echo '<span style="cursor:pointer;" class=navleft title="'.$temp_upcoming_date.' Uhr: gegen '.$ergebnis_upcoming[$i][gegner].' ('.$ergebnis_upcoming[$i][ort].')">'.$ergebnis_upcoming[$i][spiel].': '.$ergebnis_upcoming[$i][klasse];
								
									if(date("d", $ergebnis_upcoming[$i][datum])==date("d", time()) AND date("m", $ergebnis_upcoming[$i][datum])==date("m", time()))
										{ echo ' !'; }

									echo '</span><br>';
									}
								}
							else { echo "<span class=navleft>keine Spiele!</span>";  }
							?>
						</td>
					</tr>
				</table>
			</td>

		</tr>

		<tr>
			<td Height=4 Width=140 background="/gfx/menu/nav_cen_bot.jpg">
			</td>
		</tr>
		<tr>
			<td WIDTH=140 HEIGHT=10>
			</td>
		</tr>
	</table>

	<?php
		$zz=rand(1,2);
		echo '<table CELLSPACING="0" CELLPADDING="0" border="0" width="140" height="83">'; ?>
			<tr>
				<td WIDTH=140 HEIGHT=30 background="/gfx/menu/menu_ueberschrift_spon.jpg"></td>
			</tr>
			<tr>
				<td WIDTH=140 HEIGHT=1></td>
			</tr>
			<tr>
				<td WIDTH=140><img valign=top src="/gfx/sponsoren/<?php echo 1; ?>.jpg"></td>
				<td></td>
				<td></td>
			</tr>
		</table>
<?
}
```
Habe jetzt ein bisschen was weggelassen, ist aber vom Prinzip her identisch.


Auszug aus der index.php


```
require('./funktionen.php');

$smarty->assign('leftnav', navigationlinks());
```
Aufruf in index.tpl


```
<td width="140" valign="top">{$leftnav}</td>
```


----------



## cameeel (28. Januar 2007)

Was passiert denn wenn du die assign Anweisung einfach an das Ende der PHP Datei setzt? Dann wird die Funktion erst aufgerufen wenn der Rest erledigt ist oder nich?

cAm3eel.


----------



## mammuteffect (28. Januar 2007)

Nein, auch dann zeigt er es vorher an. Ist ja auch mehr oder weniger logisch, weil die Darstellung ja erst mit der index.tpl beginnen soll, es aber dummerweise schon mit der Zuweisung "$smarty->assign('leftnav', navigationlinks());" tut - warum auch immer :/


----------



## cameeel (28. Januar 2007)

Hast du vielleicht ein echo Befehl in der Funktion?
Editier mal deinen Post von oben und schick uns den ganzen Code aus funktionen.php

cAm3eel.


----------



## mammuteffect (28. Januar 2007)

Habe es gerade editiert :>


----------



## cameeel (28. Januar 2007)

Hm, also wie gesagt, entweder du verschiebst die Assign Anweisung an das Ende der PHP Datei, oder du schreibst ein Smarty Plugin. Mit einen Plugin könntest du in einer Template Datei eine PHP Funktion/Datei aufrufen.

Schau mal weiter oben da hab ich ja mal einen Link geschickt, wie man Plugins selbst schreibt.

cAm3eel.


----------



## mammuteffect (28. Januar 2007)

Jo, werde mich mal daran probieren. Vielen Dank, wenn ich fragen habe, schreibe ich dir nochmal.

Was mich aber interessieren würde ist, warum hier sonst keiner antwortet. Nutzten Smarty so wenige Leute?


----------



## daddz (28. Januar 2007)

Wieso steht das ganze HTML in einer Funktion statt in deinem Template!?
Das ergibt irgendwie keinen Sinn!

greetz
daddz


----------



## mammuteffect (28. Januar 2007)

Weil die Funktionen.php lange vor Smarty da war


----------



## cameeel (29. Januar 2007)

mammuteffect hat gesagt.:


> Weil die Funktionen.php lange vor Smarty da war


Na dann sofort Smarty-Kompatibel machen ;-)

cAm3eel.


----------

