Dann muss das eine Template dem anderen Template das Objekt übergeben.
Sprachdateien, Templates und globale Daten
Einklappen
X
-
Naja super, dann hab ich auch wieder ein riesenobjekt das immer weitergegeben wird. Ich weiß mittlerweile, warum das bei mir nicht funktioniert, der Ablauf ist folgendermaßen;
Da ich dynamisch schaue, welche funktionalen (dosomething.php) Dateien eingebunden werden, und dementsprechend auch in den Templates dynamisch geschaut wird, welche Subtemplates gebraucht werden, weiß ich eben nie, 1. welche templates einbegunden werden und 2. welche daten sie brauchen.PHP-Code:// Index.php:
if ($blub)
req('dosomething.php')
else
req('dootherthings.php')
showTpl('index')
// index.tpl
showTpl('header')
showTpl('menu')
showTpl('content')
showTpl('footer')
// content.tpl
if ($tpl['bla'])
showTpl('start')
else
showTpl('ende')
Wenn ich in den funktionalen Dateien die Templates als Objekte erstelle, sind die ja im falschen Scope - da die Templates erst später tatsächlich angezeigt werden sollen.This is what happens when an unstoppable force meets an immovable object.
Kommentar
-
Dafür sollte der Controller zuständig sein. Für mich sieht das aus als hättest du viel zu viel Logik in die Templates ausgelagert.Zitat von ApoY2k Beitrag anzeigenDa ich dynamisch schaue, welche funktionalen (dosomething.php) Dateien eingebunden werden, und dementsprechend auch in den Templates dynamisch geschaut wird, welche Subtemplates gebraucht werden, weiß ich eben nie, 1. welche templates einbegunden werden und 2. welche daten sie brauchen.Zuletzt geändert von h3ll; 01.07.2010, 19:36.
Kommentar
-
Die einzige Logik in den Templates sind for(each)-Schleifen, if-Abfragen oder eben neue Templates einbinden...
Beispiel:
Und ich habs im Grunde deshalb so zerstückelt, damit ich eben Funktion und Design getrennt habe.PHP-Code:if (isset($tpl['list']) && 1 <= count($tpl['list']))
{
foreach ($tpl['list'] as $row)
{
echo '<a href="?url='.$row['url'].'">'.$row['name'].'</a>';
}
}
Zuletzt geändert von ApoY2k; 01.07.2010, 19:41.This is what happens when an unstoppable force meets an immovable object.
Kommentar
-
Okay, danke mal für deine Geduld. Werd wohl noch ein bisschen arbeiten müssen bis es passt
Wobei ich ehrlich gesagt die Idee mit der Template-"Registry" (passt glaub am besten) für mein Projekt am sinnvollsten erachte... einfach weil ich ehrlich gesagt (noch) nicht genug über MVC in PHP verstehe, um damit zurechtzukommen.
Aber für die nächste Version werd ichs mal in Betracht ziehen. Gibts dazu vll auch Tutorials, die es anhand einer normalen PHP-Installation (ohne den Zend-Framework-Kram) erklären?Zuletzt geändert von ApoY2k; 01.07.2010, 20:16.This is what happens when an unstoppable force meets an immovable object.
Kommentar
-
Ich wollte jetzt keinen neuen Thread aufmachen, frag einfach hier mal;
Ich wollte gerade mal alle Sessionbezogenen Daten in der $_SESSION speichern. Da ist mir die Idee gekommen, dass dazu ja eigentlich praktischerweise auch die Datenbankverbindung gehört.
Also habe ich das versucht
Jedoch erhalte ich dadurch einen "Fatal error: Exception thrown without a stack frame in Unknown on line 0".PHP-Code:$_SESSION['db'] = new PDO(...);
Wenn ich die Zeile auskommentiere, ist der Error weg.
Erstaunlicherweise funktionieren aber Anweisungen wie
einwandfrei.PHP-Code:$_SESSION['db']->query(...)->fetchAll();
Ist das ein PDO-Spezifisches Problem, dass man das nicht in der Session speichern kann? (Sollte man das überhaupt machen?)This is what happens when an unstoppable force meets an immovable object.
Kommentar
-
hmm- ich würd ja wenigstens den Umweg über eine Zwischenvariable versuchen
ich vermute, er meint, du sollst die mögliche Exception beim fehlgeschlagenen Erstellen des DB-Objektes abfangen .. bzw da ist eine aufgetreten ..Code:$db_verb = new PDO (...); $_SESSION['db']=$db_verb;
[font=Verdana]
Wer LESEN kann, ist klar im Vorteil!
[/font]
Kommentar
-
Außerdem wäre das ziemlich unklug. Stell dir vor, man könnte eine Verbindung in der Session ablegen. Eine Session ist, sagen wir, 30 Minuten gültig. Wenn du jetzt 100 Besucher in 30 Minuten hast, wären auch ständig 100 Datenbankverbindungen offen.
Kurz gesagt: Eine Datenbankverbindung gehört nicht zur Sitzung, sondern zum Prozess und hat somit in der Session nichts verloren.
Kommentar
Moderator
Kommentar