Как я могу использовать Joomla Cache с моим представлением компонентов?

12

Как обычно в случае с CMS, большинство обращений происходит, пока он все еще «новый». Я хотел бы кэшировать вывод страницы в первый раз, когда она отображается за определенный период, чтобы уменьшить большую нагрузку, которая требуется для его генерации.

Я работал с документацией JCache , и базовая механика проработана, как показано здесь:

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

Я застрял, пытаясь определить, где я должен создать кеш, а затем "сладкое место", чтобы использовать этот кеш, прежде чем вся работа начнется снова.

ВВП
источник

Ответы:

8

Пока что поиски в Google заставляют меня предположить, что joomla автоматически кэширует ваш компонент, если вы добавите display(true,...)метод отображения вашего контроллера, как в следующем примере.
Пример также включает в себя некоторый измерительный код, чтобы проверить, работает ли он (часть 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
}
  • Вы должны вручную установить,$urlparams какие виды компонентов должны иметь другой кеш ( так сказать urlparams = cache_id ). А Joomla уже позаботится об общих параметрах, таких как формат, опция, вид, макет, tpl, язык en id.

  • Также помните, что в вашем компоненте не будет обновлений . Если в вашей модели есть счетчик посещений , количество отображений будет оставаться постоянным при отображении в кэшированном виде.

* Дополнительная информация: В контроллере библиотеки Joomla, следующая строка вызывает кэш представления и одновременно устанавливает кэш, если он еще не был:
$cache->get($view, 'display'); //689: legacy controller

( РЕДАКТИРОВАНИЕ 2015-01-14: добавлены URL-адреса)
( РЕДАКТИРОВАНИЕ 2015-01-15: добавлена ​​дополнительная информация о коде)

е-мотив
источник
but I can't find any core joomla code where the cache is being set.Просто заметка - это внутри $cache->getметод
Дмитрий Рекун
Вот это да! Это очень умное кодирование. Спасибо за информацию. Я обновлю ответ.
e-мотив
Просто чтобы убедиться, что ответ полный, вот он
Дмитрий Рекун