it-swarm.com.de

Wie kann ich den Cache von Joomla mit meiner Komponentenansicht verwenden?

Wie in der Regel bei einem CMS treten die meisten Treffer auf, solange es noch "neu" ist. Ich möchte die Seitenausgabe beim ersten Rendern für einen bestimmten Zeitraum zwischenspeichern, um die zum Generieren erforderliche hohe Arbeitslast zu verringern.

Ich habe aus der JCache -Dokumentation gearbeitet und die grundlegende Mechanik wie folgt ausgearbeitet:

$cache = JFactory::getCache('MyCache', '');
$cache->setCaching(true);
$cache->setLifeTime(86400);  //24 hours
$cache_id = 'MyCache_page_123';
$cached_page= $cache->get($cache_id);
if (!empty($cached_page)) {
    $the_page_output = $cached_page;
}else{
    $the_page_output = ...<div>the generated view HTML</div>....
    $cache->store($the_page_output, $cache_id);
}
// echo or return "$the_page_output"

Ich stecke fest und versuche zu bestimmen, wo ich den Cache erstellen soll, und dann den "Sweet Spot", um diesen Cache zu verwenden , bevor die ganze Arbeit von vorne beginnt.

12
GDP

Bisher habe ich bei Google-Suchen angenommen, dass Joomla speichert Ihre Komponente automatisch zwischen, wenn Sie die Anzeigemethode Ihres Controllers um display(true,...) erweitern wie im folgenden Beispiel.
Das Beispiel enthält auch einen Messcode, um zu überprüfen, ob es funktioniert (JProfiler-Teil).

public function display($cachable = false, $urlparams = array()) {
    $profiler = new JProfiler();//debug

    //Joomla cache only takes format, option, view, layout, tpl, language en id als default cache_id ($urlparams)
    $input  = new Jinput;
    $urlparams['comp_page_specific_id']=$input->getUInt('comp_specific_id');
    $urlparams['comp_page_specific_else']=$input->getUInt('comp_page_specific_else');

    parent::display(true, $urlparams);
    JFactory::getApplication()->enqueueMessage($profiler->mark( ' seconds with caching<br>Only works after someone has visited this page at least once.<br>Can be reset in backend.' ));//debug
}
  • Sie müssen manuell den $urlparams festlegen, welche Komponentenansichten einen anderen Cache benötigen (rlparams = cache_id sozusagen). Und Joomla kümmert sich bereits um allgemeine Parameter wie Format, Option, Ansicht, Layout, tpl, Sprache und ID.

  • Beachten Sie auch, dass keine Updates in Ihrer Komponente ausgeführt wird. Wenn Sie einen Trefferzähler in Ihrem Modell haben, bleibt Anzahl der Treffer konstant, wenn eine zwischengespeicherte Ansicht angezeigt wird.

* Zusätzliche Informationen: Im Controller der Joomla-Bibliothek wird in der folgenden Zeile der Ansichtscache aufgerufen und gleichzeitig der Cache gesetzt, falls dies noch nicht der Fall war:
$cache->get($view, 'display'); //689: legacy controller

( EDIT 14.01.2015: URL-Parameter hinzugefügt)
( EDIT 15.01.2015: Code-Zusatzinfo hinzugefügt)

8
e-motiv