На форуме к каждому комментарию надо вывести статус автора этого комментария.
Прописываю такой код:
<?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 такой:
<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'] не кешировалась, т.е. чтобы при каждом обновлении страницы обновлялось её значение? Перегуглил и перечитал уже кучу инфы, но никак не могу найти или понять как это сделать.
Комментарии
Использейте $_SESSION
Можете привести пример как правильно его использовать?
Я сохраняю значение так $_SESSION['status'] = $status; А как его потом передать в twig? Оно всё равно не обновляется в кешируемой странице. В общем я полдня просидел и у меня ничего не получилось.
Вот пример использования 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?
В гвиге доступны перменные из препроцесса, это видно в шаблонах.
А как это поможет с кешированием? Твиг-шаблоны в восьмерке кешируются же.
Вот именно, что твиг кеширует шаблоны. Знаю как отключить это кеширование полностью, но вот как отключить для конкретной переменной...
Тут разве что аяксом дергать нужное значение.
Можно посмотреть как организована работа с $user = она же не кешируется
Речь идет о передаче значения в твиг-шаблон при включенном кешировании. Причем тут user?
вывел в твиге время последнего доступа {{user.access.value}}, значение замерло и изменилось только после очистки кеша
Иными словами если Вы зарегистрируетесь, то зайти сможете только после очистки кеша ? что-то Вы не туда роете или не хотите туда куда надо рыть
А разве после регистрации в базе не обновляются таблицы с кешем? Может я конечно что-то не то делаю, но чтобы я не выводил в шаблоне твига у меня абсолютно все кешируется, даже $user. Но вот что я случайно заметил. У меня был план запихнуть значение в блок вьюхи и отключить в ней кеш. Но и он рассыпался, потому что, если вывести в твиге вьюху с настройками без кеширования (абсолютно неважно какую, главное чтобы в ней был отключен кеш):
$variables['test'] = views_embed_view('test', 'block-1');
То тогда все переменные в шаблоне твига начинают обновляться, т.е. кеш всей страницы отключается. Но стоит только в настройках этой вьюхи включить кеш или убрать вывод вьюхи из шаблона, то значения опять замирают.