Перейти к содержимому


Фотография
- - - - -

Работа с кешем JBZoo

cache jbzoo

Сообщений в теме: 2

#1 CB9TOIIIA

CB9TOIIIA

Отправлено 15 March 2016 - 15:27

Всем привет, вопрос наверное к Денису и КО ^_^
 
Как работать с кешем? т.е. я почитал тут абзац про API - Я подумал, я бы мог обернуть рендер элемента (или позиции) - чтобы в кеше лежал, т.к. обращение каждый раз к Youtube довольно долгое.
<?php JBDump::mark('start youtube'); ?>


<?php $key = md5($youtube); ?>
<?php $group = 'youtube'; ?>
<?php if (!($youtube = $this->app->jbcache->get($key, $group))) {?>
    <div class="youtube">
    <?php if ($this->checkPosition('youtube')) : ?>
        <?php $youtube = $this->renderPosition('youtube'); ?>
        <?php echo $youtube; ?>
    <?php endif; ?>
</div>

<?php
 $this->app->jbcache->set($key, $youtube, $group);
}

?>
<?php JBDump::mark('finish youtube'); ?>

 
E5xO5z6.png
 
zp9r1LS.png

Сообщение отредактировал SmetDenis: 16 March 2016 - 16:39
форматирование

  • 2

#2 CB9TOIIIA

CB9TOIIIA

Отправлено 15 March 2016 - 16:39

Не понимаю, если кешировать в элементе - только 1 видео будет кешироваться, остальные ломаются...
В тизере понял - так вроде низя)
  • 0

#3 SmetDenis

SmetDenis

Отправлено 16 March 2016 - 16:45

Хелпер jbcache->get/set работает только с переменными.
А тут нужен перехват вывода (ob_*)


Нужно что-делать что-то вроде такого

$group = 'cache_group_name';
$hash = $item->id;

$cache = JFactory::getCache($group, 'output');
$cache->setCaching(true); // включаем насильно

$result = $cache->get($hash);

if ($result) {
    echo $result;

} else {
    ob_start();
    ob_implicit_flush(false);
    ?>

    <!-- какой-то произвольный HTML -->

    <?php
    $output = ob_get_contents();
    ob_end_clean();

    $cache->store($output, $hash);
    echo $output;
}

Либо, если работаем как с переменной
<?php 
$key = md5($youtube);
$group = 'youtube';

if (!($html = $this->app->jbcache->get($key, $group))) {
    $html = '<div class="youtube">';
    $html .= $this->renderPosition('youtube'); // тяжелый код тут
    $html .= '</div>';
    <?php
    $this->app->jbcache->set($key, $html, $group);
}
echo $html;
Как бы это не казалось очевидным, стоит иметь ввиду что кеш не даст элементу выполнится, а значит никакой код внтури не сработает.
Это будет хорошо заметно на подключаемых скриптах и стилях. Т.е их нужно будет включить вне кеша.
  • 1
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.






Темы с аналогичным тегами cache, jbzoo

Click to return to top of page in style!