Як я можу використовувати кеш Joomla з поданням компонентів?


13

Як зазвичай це стосується 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"

Я застряг, намагаючись визначити, де я повинен створити кеш, а потім "солодке місце", щоб використовувати цей кеш, перш ніж вся робота розпочнеться заново.

Відповіді:


9

Поки 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

( EDIT 2015-01-14: Додано URL-адреси)
( EDIT 2015-01-15: Додано додаткову інформацію про код)


but I can't find any core joomla code where the cache is being set.Просто зауваження - це всередині $cache->getметоду
Дмитро Рекун

Оце Так! Це дуже розумне кодування. Дякую за інформацію. Я оновлю відповідь.
e-motiv

Просто для впевненості, що відповідь повна, ось вона
Дмитро Рекун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.