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

12

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 anhand der JCache- Dokumentation gearbeitet und die grundlegenden Mechanismen 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.

BIP
quelle

Antworten:

8

Bisher nahm ich bei Google-Suchen an, dass Joomla Ihre Komponente automatisch zwischenspeichert, wenn Sie display(true,...)die Anzeigemethode Ihres Controllers wie im folgenden Beispiel hinzufügen .
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$urlparams festlegen, welche Komponentenansichten einen anderen Cache benötigen ( sozusagen urlparams = cache_id ). Und Joomla kümmert sich bereits um gängige Parameter wie Format, Option, Ansicht, Layout, tpl, Sprache und ID.

  • Beachten Sie auch, dass in Ihrer Komponente keine Aktualisierungen vorgenommen werden. Wenn Sie in Ihrem Modell einen Trefferzähler haben, bleibt die 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 2015-01-14: URL-Parameter hinzugefügt) ( EDIT 2015-01-15: Code- Zusatzinfo hinzugefügt)

e-motiv
quelle
but I can't find any core joomla code where the cache is being set.Nur eine Anmerkung - es ist in $cache->getMethode
Dmitry Rekun
Beeindruckend! Das ist eine sehr clevere Codierung. Danke für die Information. Ich werde die Antwort aktualisieren.
E-Motiv
Nur um sicherzugehen, dass die Antwort voll ist, hier ist sie
Dmitry Rekun