![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Der Student
Registriert seit: 03.01.2007
Ort: München
Beiträge: 57
|
Soa ich arbeite schon lang mit Smarty, in unserem aktuellen Projekt nutzen wir Smarty wie folgt:
Wir haben eine Index Datei, in dieser steht ansich die Komplette Struktur der Seite: (hier nur als Beispiel) Code:
<doctype>
<html>
<head>
{$smarty.capture.title}
</head>
<body>
<div id="head_wrapper">...</div>
<div id="navi_wrapper">...</div>
<div id="content_wrapper">
{$smarty.capture.content}
</div>
</body
</html>
Und die einzelnen Contentseiten sehen dann so aus: Code:
{capture name=title}
<title>Seitentitel</titel>
<script>vlt. noch css oder js Dateien</script>
{/capture}
{capture name=content}
<h1>Überschrift</h1>
mit dem ganzen Content der Unterseite.
{/capture}
Das Funktioniert ansich wunderbar! So kann ich für jede Unterseite einzelne Titel definieren, zusätzlich JS oder CSS Dateien laden, wenn gewünscht auch eine eigene Navi an der Seite einbinden (eigenes Capture) und eben den Content schreiben. So ist alles kompakt in einer Datei! Und die Indexdatei kann ebenfalls komplett in einer Datei stehen, so ist es doch recht übersichtlich wenn man mehrere verschachtelte divs hat. Nun zu meinem eigentlichen Problem: Und zwar funktioniert Caching nicht mit {capture}. Meine Frage ist jetzt wie löst ihr die Pagestruktur mit Smarty? Ich denke per capture ist es ansich ganz cool wenn man alles wichtige in einer Datei hat, besser als in jeder Templatedatei {include header.tpl} {include footer.tpl} etc zu setzen! Vorallem wenn ich sowas wie den Titel extra definieren will. Jetzt fehlt mir ehrlich gesagt die Idee wie ich das umsetzen könnte.
__________________
Wenn ich du wäre, wäre ich lieber ich. http://www.clubstars.net http://www.x-tinct.de Geändert von Flor1an (31.03.2008 um 12:01 Uhr). |
|
|
|
|
|
Nach oben #2 |
|
BIN EIN KRASSA HELD!!!111
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.188
|
Die Frage ist was willst du Cachen ? ganze Seiten ? dann bau dir deinen eigenen Cache der die Inhalte nach dem erstellen durch Smarty cacht, verbunden z.b.mit der aufgerufenen URL ?
|
|
|
|
|
|
Nach oben #3 |
|
Erfahrener Benutzer
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 491
|
Ich weiß nicht, ob diese Lösung für dich überhaupt in Frage kommt, aber ich arbeite in solchen Fällen i.d.R. mit einer Datenbank, sodass für den Titel und etwaige zuätzliche Meta-Daten kein eigenes Template benötigt wird, sondern die Daten kommen aus einer zentralen Quelle.
Ne andere Möglichkeit rein mit Smarty wäre vllt, den content ohne zu capture einfach zu fetchen und dann als Variable in die Struktur einfügen. Das müsste so funktionieren und imo auch caching für den content ermöglichen. php PHP-Code:
HTML-Code:
{capture name=title}
<title>Seitentitel</titel>
{/capture}
<h1>Überschrift</h1>
mit dem ganzen Content der Unterseite.
{/capture}
HTML-Code:
<html> <head> {$smarty.capture.title} </head> <body> {$content} </body </html>
__________________
Weißt Bescheid - Scheiß wie weit |
|
|
|
|
|
Nach oben #4 |
|
Der Student
Registriert seit: 03.01.2007
Ort: München
Beiträge: 57
|
Ja das über eine extra Variable zu lösen wäre eine Idee, angenommen ich habe aber auf der Seite verschiedene {captures} dann könnten die nicht gecacht werden sondern wirklich nur den Hauptteil, der Content!
Ich werds mal ausprobieren ob es so für das Projekt ausreicht! Danke!
__________________
Wenn ich du wäre, wäre ich lieber ich. http://www.clubstars.net http://www.x-tinct.de |
|
|
|
|
|
Nach oben #5 |
|
Der Student
Registriert seit: 03.01.2007
Ort: München
Beiträge: 57
|
Soar ich hab das ganze jetzt mal ausprobiert, jetzt besteht das Problem dass wenn der Content gecached wird, werden die Sachen die in den {capture} Blöcken stehen gar nicht mehr angezeigt :/ Sind also in der gecacheten Datei nicht vorhanden!
__________________
Wenn ich du wäre, wäre ich lieber ich. http://www.clubstars.net http://www.x-tinct.de |
|
|
|
|
|
Nach oben #6 |
|
Der Student
Registriert seit: 03.01.2007
Ort: München
Beiträge: 57
|
Soar also nochmal für alle die es interessiert.
Ich hab gestern noch ewig rumgebastelt, bis ich mal in dem Aufbau von Smarty richtig drinnen war. So wie Smarty jetzt funktioniert ist ein Caching von {capture} sowie allen anderen Blöcken unmöglich! Es kann wirklich nur Text gecached werden, einzelne Smarty oder PHP Anwesungen leider nicht. Naja ich werd es jetzt so machen dass ich die Struktur ansich beibehalte allerdings wenn ich für eine bestimmte Stelle Caching benötige werde ich eine extra tpl File erstellen die dann mit fetch() geholt wird und eben in der File mit den {capture} Blöcken einfach über Variable angezeigt wird. Die Datei fürs Caching kann ich mit dem fetch() ganz normal cachen. Ist zwar etwas umständlicher aber es ist einfach als Smarty umzuschreiben. Außerdem sind es meistens eh nur bestimmte "kurze" Passagen die gecached werden müssen.
__________________
Wenn ich du wäre, wäre ich lieber ich. http://www.clubstars.net http://www.x-tinct.de |
|
|
|
|
|
Nach oben #7 |
|
Entwickler
Registriert seit: 05.02.2007
Ort: München
Beiträge: 113
|
Hallo Flor1an,
wie du erkannt hast, liegt das Problem im Design von Smarty. Meinen Erfahrungen nach ist es im Kern zu statisch. Es eignet sich wunderbar für flache Hirarchien und einfache Strukturen, in denen man den Kern nicht anpassen oder erweitern muss, die Grenzen von Smarty werden jedoch ausserhalb des genannten Bereichs schnell sichtbar. Für komplexere Anwendungen benötigst du daher einen Kernel, der generisch und anpassbar ist. Für das Caching gibt es im im Adventure PHP Framework die Möglichkeit, für den Content ein eigenes Templates in den gewünschten Bereich des "Master-Templates" einzubinden, das die Caching-Funktionalität beinhaltet. Hierzu erweitert man einfach den Tag core:importdesign oder schreibt sich ein eigenes Tag, das beim Transformieren entweder den Wert des Caches zurück gibt oder den Inhalt neu generiertm wenn der Cache abgeschalten ist oder dieser keinen Wert enthält. Konkret kann das so aussehen: my_template.html Code:
<html> <head> ... </head> <body> ... <core:addtaglib namespace="my::namespace" prefix="cache" class="content" /> <cache:content /> ... </body> </html> cache_taglib_content.php PHP-Code:
Wenn ich dir ein konkreteres Beispiel für deine Anwendung machen soll, sag einfach Bescheid, dann können wir das gerne diskutieren.
__________________
Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Have a look at http://www.adventure-php-framework.org! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Geändert von dr.e. (01.04.2008 um 20:05 Uhr). Grund: Beispiel hinzugefügt |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Mehrsprachigkeit mit Smarty | Eyüp | PEAR, PECL und Frameworks | 7 | 08.06.2007 15:40 |
| Smarty und number_format() | Berti | PEAR, PECL und Frameworks | 12 | 23.02.2007 04:39 |
| Kategorie aufbau | bob | Datenbanken | 6 | 27.01.2007 21:18 |
| Verständnissfrage zu Smarty | la-finest | PEAR, PECL und Frameworks | 7 | 26.09.2006 19:25 |
| Navigation auf Smarty umstellen?! | napsio | PEAR, PECL und Frameworks | 4 | 25.01.2006 19:22 |