¿Cómo puedo usar Joomla's Cache con mi vista de componentes?

12

Como suele ser el caso con un CMS, la mayoría de los resultados ocurren mientras todavía es "nuevo". Me gustaría almacenar en caché la salida de la página la primera vez que se procesa durante un período determinado para reducir la gran carga de trabajo que se requiere para generarla.

He estado trabajando a partir de la documentación de JCache , y he trabajado la mecánica básica como se muestra aquí:

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

Estoy atascado tratando de determinar dónde debo crear el caché, luego el "punto óptimo" para usar ese caché antes de que todo el trabajo comience nuevamente.

PIB
fuente

Respuestas:

8

Hasta ahora, las búsquedas en Google me hacen suponer que Joomla almacena en caché su componente automáticamente si agrega display(true,...)al método de visualización de su controlador como en el siguiente ejemplo.
El ejemplo también incluye algún código de medición para verificar si está funcionando (parte 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
}
  • Usted tiene que configurar manualmente la$urlparams cual definen qué vistas de componentes necesitan una caché diferente ( urlparams = cache_id por así decirlo). Y Joomla ya se encarga de los parámetros comunes como el formato, la opción, la vista, el diseño, tpl, language en id.

  • También tenga en cuenta que no se realizarán actualizaciones en su componente. Si tiene un contador de visitas en su modelo, el número de visitas se mantendrá constante cuando se muestre una vista en caché.

* Información adicional: en el controlador de la biblioteca joomla, es la siguiente línea la que llama al caché de vista y al mismo tiempo establece el caché si aún no lo estaba:
$cache->get($view, 'display'); //689: legacy controller

( EDITAR 2015-01-14: urlparams agregados)
( EDITAR 2015-01-15: información adicional de código agregado)

e-motiv
fuente
but I can't find any core joomla code where the cache is being set.Solo una nota - es un $cache->getmétodo interno
Dmitry Rekun
¡Guauu! Esa es una codificación muy inteligente. Gracias por la info. Actualizaré la respuesta.
e-motiv
Solo para estar seguro de que la respuesta está completa, aquí está
Dmitry Rekun