Prob mit Smarty...

Headymaster

Erfahrenes Mitglied
Hallo!

Also habe da nen kleines Prob mit smarty und dem automatischen includen von andren Templates innerhalb des Content Bereiches.

Also kommen wir mal zu index.tpl:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" href="inc/styles/style.css" />
<title>Testseite</title>
</head>
<body>
   <div id="oben"><div class="inhaltDiv">#oben</div></div>
   <div id="links"><div class="inhaltDiv">#links</div></div>
   <div id="mitte"><div class="inhaltDiv">{$Content}</div></div>
   <div id="rechts"><div class="inhaltDiv">#rechts</div></div>
   <div id="unten"><div class="inhaltDiv">#unten</div></div>
</body>
</html>

So in meinem FrontController rufe ich Smarty folgendermaßen aus meiner Registry-Klasse auf.

PHP:
$reg = Registry::getInstance();
	   $reg->setRequest($request);
	   $reg->setResponse($response);
	   $smarty = $reg->get('smarty');

$this->preFilters->processFilters($request, $response);
	   $page = $this->presolver->getPage($request);
	   $smarty->assign('Content', $page->show($request, $response));
	   $smarty->display('index.tpl');
	   $this->postFilters->processFilters($request, $response);
	   
	   $response->flush();

Also hier sieht man, dass in der Index.tpl der Platzhalter {$Content} mit dem Inhalt des FileSystemPageResolvers gefüllt werden soll....

Naja so es funktioniert soweit, dass meine index.tpl und auch die tpl-datei die includet werden soll aufgerufen und deren Platzhalter ersetzt werden, jedoch sehe ich die HelloWorld.tpl nicht nur wenn ich in den Quelltext schaue sehe ich sie.

So hier mal was denn $page->show($request, $response) überhaupt zurückliefert.
HelloWorld.php:
PHP:
class HelloWorldPage implements Page
{
    public function show(Request $request, Response $response)
	{
	  $registry = Registry::getInstance();
	  $smarty = $registry->get('smarty');
	    if ($request->issetParameter('Name'))
		{
		   $smarty->assign('Name', $request->getParameter('Name'));
		}
	 $smarty->display('HelloWorld.tpl');
	}
}

So und hier die HelloWorld.tpl:
HTML:
<p>{if $Name}Hallo {$Name}.{else}Hallo unbekannter.{/if}</p>

Hoffe ihr habt ne Idee wie smarty sowas handhabt, denn ich arbeite erst seit gestern damit und auch aus der Doku werde ich nur teils schlau...

Würde mich auf jeden Fall über Hilfe freuen :)

MFG Niels
 
Also habe das nun so provisorisch gelöst...aba net grad das dolle meiner MEinung nach.

Also index.tpl:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" href="inc/styles/style.css" />
<title>Die NilsonLiga XD</title>
</head>
<body>
   <div id="oben"><div class="inhaltDiv">#oben</div></div>
   <div id="links"><div class="inhaltDiv">#links</div></div>
   <div id="mitte"><div class="inhaltDiv">{include file="$Content.tpl"}</div></div>
   <div id="rechts"><div class="inhaltDiv">#rechts</div></div>
   <div id="unten"><div class="inhaltDiv">#unten</div></div>
</body>
</html>

So in jedem Aufruf des FrontControllers und der daraus resultierenden Aufgabe die Methode show von z.b. Addition aufzurufen:
PHP:
   public function show(Request $request, Response $response)
   {
    $registry = Registry::getInstance();
	$smarty = $registry->get('smarty');
      if (!$request->issetParameter('a') || !$request->issetParameter('b'))
	  {
	      $smarty->assign('Fehler', 'Bitte Parameter "a" und Parameter "b" setzen.');
	  }
	  else
	  {
	      $smarty->assign('a', (int)$request->getParameter('a'));
		  $smarty->assign('b', (int)$request->getParameter('b'));
		  $smarty->assign('sum', (int)$request->getParameter('a')+(int)$request->getParameter('b'));
	  }
	return 'Addition';
   }

So naja also {$Content} wird dann also durch die return Anweisung der aufgerufen Page ersetzt...

Nicht grad sehr sauber.... aber es funktioniert erstmal ...

Wenn ihr ne idee habt es sauberer zu machen oder gar etwas anders zu machen wäre euch für Hilfe sehr verbunden.

MFG Niels
 
Zurück