Dynamische Inhalte

Wir kommen beim Cachen eines Seitenabschnitts oder einer ganzen Seite oft in Situtationen, bei denen der Inhalt, abgesehen von einigen wenigen Stellen, relativ statisch bleibt. Eine Hilfeseite kann zum Beispiel statische Hilfetexte sowie oben den gerade angemeldete Benutzer anzeigen.

Wir könnten in diesem Fall den Cache-Inhalt entsprechend dem angemeldeten Benutzer variieren, würden damit aber viel von unserem wertvollen Cache-Speicher verschwenden, da außer dem Benutzernamen der meiste Inhalt immer gleich bleibt. Wir könnten die Seite auch in mehrere Seitenbereiche unterteilen und diese individuell speichern. Aber das würde den View komplizierter und unseren Code komplexer machen. Einen besseren Ansatz verfolgt das CController-Feature der dynamischen Inhalte.

Ein dynamischer Inhalt steht für einen Bereich in der Ausgabe, der nicht gecacht werden soll, selbst wenn er in einen gecachten Seitenabschnitt eingebettet ist. Damit dieser Inhalt dynamisch bleibt, muss er jedesmal neu erzeugt werden, selbst wenn der umhüllende Inhalt aus dem Cache geliefert wird. Aus diesem Grund ist es erforderlich, dass dynamischer Inhalt von einer Methode oder einer Funktion erzeugt wird.

Um dynamischen Inhalt einzufügen, rufen wir CController::renderDynamic() an der gewünschten Stelle auf:

...Anderer HTML-Inhalt...
<?php if($this->beginCache($id)) { ?>
...Zu cachender Seitenabschnitt...
    <?php $this->renderDynamic($callback); ?>
...Zu cachender Seitenabschnitt...
<?php $this->endCache(); } ?>
...Anderer HTML-Inhalt...

$callback bezieht sich oben auf einen gültigen PHP-Callback. Dies kann ein String mit dem Namen einer globalen Funktion oder einer Methode in der aktuellen Controller-Klasse sein. Es kann auch ein Array sein, der sich auf eine Klassenmethode bezieht. Alle weiteren Parameter von renderDynamic() werden an den Callback weitergegeben. Der Callback sollte den dynamischen Inhalt zurückliefern, statt ihn auszugeben.

$Id: caching.dynamic.txt 163 2008-11-05 12:51:48Z weizhuo $

Be the first person to leave a comment

Please to leave your comment.