Comment puis-je utiliser le cache de Joomla avec ma vue des composants?

13

Comme c'est généralement le cas avec un CMS, la plupart des hits se produisent alors qu'il est encore "nouveau". Je voudrais mettre en cache la sortie de la page la première fois qu'elle est rendue pour une période donnée afin de réduire la lourde charge de travail qui est nécessaire pour la générer.

J'ai travaillé à partir de la documentation JCache , et j'ai travaillé les mécanismes de base comme indiqué ici:

$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"

Je suis coincé à essayer de déterminer où je dois créer le cache, puis le "point idéal" pour utiliser ce cache avant que tout le travail ne recommence.

PIB
la source

Réponses:

9

Jusqu'à présent, les recherches Google me font supposer que joomla met automatiquement en cache votre composant si vous ajoutez display(true,...)à la méthode d'affichage de votre contrôleur comme dans l'exemple suivant.
L'exemple comprend également un code de mesure pour vérifier s'il fonctionne (partie JProfiler).

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
}
  • Vous devez définir manuellement la$urlparams définition des vues de composants qui nécessitent un cache différent ( urlparams = cache_id pour ainsi dire). Et Joomla prend déjà en charge les paramètres communs tels que le format, l'option, la vue, la mise en page, le tpl, la langue et l'identifiant.

  • Sachez également qu'aucune mise à jour ne sera effectuée dans votre composant. Si vous avez un compteur d'accès dans votre modèle, le nombre d'appels restera constant lorsqu'une vue en cache est affichée.

* Informations supplémentaires: dans le contrôleur de la bibliothèque joomla, c'est la ligne suivante qui appelle le cache de vue et définit en même temps le cache s'il ne l'était pas encore:
$cache->get($view, 'display'); //689: legacy controller

( EDIT 2015-01-14: Ajout d'urlparams)
( EDIT 2015-01-15: Ajout d'informations supplémentaires sur le code)

e-motiv
la source
but I can't find any core joomla code where the cache is being set.Juste une note - c'est à l'intérieur de la $cache->getméthode
Dmitry Rekun
Hou la la! C'est un codage très intelligent. Merci pour l'info. Je mettrai à jour la réponse.
e-motiv
Juste pour être sûr que la réponse est complète, ici il est
Dmitry Rekun