Отключить кеширование для конкретной переменной

Главные вкладки

Аватар пользователя alexboy alexboy 9 сентября 2016 в 19:56

На форуме к каждому комментарию надо вывести статус автора этого комментария.

Прописываю такой код:

<?php function bartik_preprocess_comment(&$variables) {
$comment $variables['elements']['#comment'];
$uid $comment->uid->target_id;
$variables['uid'] = $uid;
$time time();
$user user_load($uid);
$access $user->getLastAccessedTime();
$variables['status'] = $time $access
}
?>

А потом в файле темы: comment--comment_forum.html.twig такой:

{% if status < 900 %}
                                        <span class="online-yes">
                                <span class="online-yes">
                                        <span>на форуме</span>
                                </span>
                        </span>
               
                {% else %}

                        <span class="online-no">
                                <span class="online-no">
                                        <span>Не в сети</span>
                                </span>
                        </span>
                        {% endif %}
                       

Но результат кешируется и если автор комментария уже не на сайте, то другие видят, что он по-прежнему онлайн, до тех пор пока кеш не обновится.

Подскажите как сделать так, чтобы конкретная переменная $variables['status'] не кешировалась, т.е. чтобы при каждом обновлении страницы обновлялось её значение? Перегуглил и перечитал уже кучу инфы, но никак не могу найти или понять как это сделать.

Комментарии

Аватар пользователя alexboy alexboy 14 сентября 2016 в 19:04

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:

Использейте $_SESSION


Можете привести пример как правильно его использовать?
Я сохраняю значение так $_SESSION['status'] = $status; А как его потом передать в twig? Оно всё равно не обновляется в кешируемой странице. В общем я полдня просидел и у меня ничего не получилось.

Аватар пользователя alexboy alexboy 15 сентября 2016 в 13:21

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:

Вот пример использования https://www.drupal.org/project/examples/releases/8.x-1.x-dev например file_example/src/Form/FileExampleReadWriteForm.php


Там пример с формами. А мне надо вывести переменную в шаблон twig и чтобы она не кешировалась. Если я в файле bartik.theme в $_SESSION запишу значение переменной $_SESSION['status'] = $status, то как мне её передать потом в шаблонизатор twig?

Аватар пользователя alexboy alexboy 16 сентября 2016 в 16:37

Вот именно, что твиг кеширует шаблоны. Знаю как отключить это кеширование полностью, но вот как отключить для конкретной переменной...

Аватар пользователя alexboy alexboy 17 сентября 2016 в 18:29

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:

Можно посмотреть как организована работа с $user = она же не кешируется Smile


вывел в твиге время последнего доступа {{user.access.value}}, значение замерло и изменилось только после очистки кеша

Аватар пользователя sas@drupal.org sas@drupal.org 17 сентября 2016 в 20:04

Иными словами если Вы зарегистрируетесь, то зайти сможете только после очистки кеша ? Smile что-то Вы не туда роете или не хотите туда куда надо рыть

Аватар пользователя alexboy alexboy 17 сентября 2016 в 21:18

А разве после регистрации в базе не обновляются таблицы с кешем? Может я конечно что-то не то делаю, но чтобы я не выводил в шаблоне твига у меня абсолютно все кешируется, даже $user. Но вот что я случайно заметил. У меня был план запихнуть значение в блок вьюхи и отключить в ней кеш. Но и он рассыпался, потому что, если вывести в твиге вьюху с настройками без кеширования (абсолютно неважно какую, главное чтобы в ней был отключен кеш):
$variables['test'] = views_embed_view('test', 'block-1');
То тогда все переменные в шаблоне твига начинают обновляться, т.е. кеш всей страницы отключается. Но стоит только в настройках этой вьюхи включить кеш или убрать вывод вьюхи из шаблона, то значения опять замирают.