[SMARTY] Funktion in Smarty-Variable laden

mammuteffect

Mitglied
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
 
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.
 
Da ist aber auch die komplette Useranmeldung drin usw..

Ich verstehe es sowieso nicht, warum er es bei der Zuweisung gleich alles anzeigt :confused:
 
Zeig uns mal ein bischen was von deinem PHP/Template Quellcode, damit dürften wir wahrscheinlich mehr anfangen können :)

cAm3eel.
 
Da kannst du Recht haben :)

Auszug aus funktionen.php:

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

PHP:
require('./funktionen.php');

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

PHP:
<td width="140" valign="top">{$leftnav}</td>
 
Zuletzt bearbeitet:
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.
 
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 :/
 
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.
 
Zurück