web-dev-qa-db-fra.com

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

Comme c'est généralement le cas avec un CMS, la plupart des hits surviennent tant qu'il est encore "nouveau". J'aimerais mettre en cache la sortie de la page la première fois qu'elle est restituée pendant une période donnée, afin de réduire la charge de travail lourde nécessaire à sa génération.

Je travaille à partir de la documentation JCache , et je dispose de la mécanique de base décrite ci-dessous:

$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é pour essayer de déterminer où je devrais créer le cache, puis le "point idéal" pour utiliser ce cache avant que tout le travail ne recommence.

12
GDP

Jusqu'ici, les recherches sur Google me font présumer 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 inclut également du code de mesure pour vérifier son fonctionnement (pièce 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éfinissez manuellement le $urlparams qui définit les vues de composant nécessitant un cache différent (rlparams = 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 format, la langue et l’id.

  • Sachez également que pas de mises à jour sera effectué dans votre composant. Si vous avez un compteur de hits dans votre modèle, le le nombre de hits restera constant quand 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 la vue et la définit en même temps si ce n'était pas encore le cas:
$cache->get($view, 'display'); //689: legacy controller

( MODIFIER 2015-01-14: URLlparams ajoutés)
( MODIFIER 2015-01-15: Ajout d'informations supplémentaires sur le code)

8
e-motiv