Portal > Foren > PHP > PHP-Programmierung > Blöcke, die innerhalb eines Templates nicht gecached werden
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 04.02.2007, 18:09 Nach oben    #1
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard Blöcke, die innerhalb eines Templates nicht gecached werden

Tag,
wie bei Smarty auch möchte ich eine Routine in meiner TemplateEngine haben, die mir es ermöglicht, trotz Caching mit dynamische Bereiche freizuhalten.
( http://smarty.php.net/manual/de/lang...ion.insert.php )
Dies ist mir sehr wichtig, denn bei einem Projekt war das Fehlen dieser Möglichkeit Grund die gesamte Caching-Klasse nicht zu benutzen.

Wie könnte ich soetwas technisch realisieren?
Mein Problem hier wär nicht die Zerlegung mittels Regex o.Ä., sondern wie ich das Caching eines Templates dann vornehme.
Hier muss ich ja dann ganz am Anfang beim Cachen beginnen. Das Template komplett zu generieren und anschließend statisch abzuspeichern wird wohl ja so nicht funktionieren, da der Block der nicht gecached werden soll ja dann doch mit gespeichert wird. (Dieser Block wird übrigens durch {[nocache]} ... {[endnocache]} ausgezeichnet).

Wie soll ich das Template dann cachen? Codetechnisch gesehn wird das Template ja erst gerendert, und dann gespeichert, wenn es keinen Cache-Eintrag gibt:
PHP-Code:
<?php
if(!$oCache -> displayCache('simpleUserList')) {
        
// Cache does not exist, create it
        
$oModel -> query("SELECT userID, userName, email, realPrename FROM users ORDER BY userID ASC");

        while(
$oModel -> fetchResult()) {
                
$oTemplate -> assign('userData'$oModel -> oResult);
        }

        
$sTemplateContent $oTemplate -> render();
        
$oCache -> writeCache('simpleUserList'$sTemplateContentCACHE_FIVE_MINUTES);
}
?>
So sieht es derzeit aus.
Hat jemand eine Idee wie ich solche no-Cache-Blöcke realisieren könnte (ohne dass ich jetzt den Smarty-Code durchwühle)?
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.02.2007, 23:15 Nach oben    #2
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Wo liegt dein Problem?
PHP-Code:
$View = new View_SimpleUserList;

if (!
$View->cacheBuild() || $View->cacheExpired()) {

    
$View->assign('Users'User::getAll());
    
$View->writeToCache('5m');
}

$View->assign('rapidlyChangingContent'WebService::getIt());

return 
$View;

// spaeter:

$View->display(); 
Die Abfrage kann man natürlich zusammenfassen. Prinzipiell macht es Sinn, erstmal komplett alles abzuarbeiten und dann erst mit der Ausgabe zu beginnen. So prüfst du also nur, ob die Inhalte gecached wurden und behandelst erstmal nur diesen Punkt (wobei die Reihenfolge Wurscht ist). Die "dynamischen" Inhalte weist du dann in jedem Fall zu, also auch, wenn das Template bereits gerendert wurde. (Andere Option sind natürlich Komponenten, die erst zum Zeitpunkt des Renderns abgearbeitet werden - in dem Fall brauchst du in den Controllern ja nichts zu definieren.)

Wie das auf Seiten der Template-Engine aussieht, hängt vom Prinzip ab. Hört sich so an, als ob du die Templates nicht in PHP umschreibst, sondern die Inhalte einsetzt (wovon ich abrate). In dem Fall bleibt halt noch diese eine Operation übrig, die du mit jedem Template machen musst, egal, ob es aus dem Cache kommt oder gerade erst erstellt wurde. Also: erst entweder aus dem Cache ziehen oder rendern und dann unabhängig davon nochmal die dynamischen Inhalte reinpacken.

Allerdings kann so dann nicht mehr aus den "statischen" Elementen heraus auf die "dynamischen" zugegriffen werden. Würde ich mir aber keinen Kopf drüber machen, sondern in dem Fall eben einfach Templates in PHP-Skripte umwandeln. Die kannst du dann problemlos halbfertig cachen, da der Zugriff auf Variablen ja auch im Cache gespeichert wird - ob diese zum Zeitpunkt des Renderns definiert sind oder erst später definiert werden (in einem zweiten Drchgang sozusagen) spielt dann ja keine Rolle.

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2007, 05:55 Nach oben    #3
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Du hast recht, ich hab ziemlich kompliziert gedacht.
Bisher hatte ich es nämlich so gehandhabt, dass das Template nicht direkt aus dem Cache kommt, sondern direkt aus dem Cache angezeigt wird.

Wenn ich das Template aber einfach nicht anzeige, sondern einfach erstmal aus dem Cache lade, kann ich ja weiterhin noch Content hinzufügen, du hast recht, war ein Denkfehler von mir.

Danke
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem bei Verarbeitung von Templates (Eigene Klassen) dago PHP-Programmierung 21 31.08.2006 16:02
Templates - Was sie bieten sollten!? MrNiceGuy PHP-Programmierung 26 28.05.2006 22:14
Vererbung bei Templates Pain-maker PHP-Programmierung 6 28.03.2006 15:37
[PHP] Ein einfaches Template-System MrNiceGuy Tutorials 0 09.10.2005 18:30


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:10 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45