На моем сайте Drupal 8 я хочу поместить код в шаблон пользователя, чтобы отобразить его статус (онлайн, отсутствует или оффлайн).
Я хочу сделать это только с TWIG, без создания пользовательских модуль.
В каких условиях, как тогда рассчитать последний доступ пользователя и текущее время?
https://docs.w3cub.com/drupal~8/core-lib-drupal-core-session-usersession.php/function/usersession-getlastaccessedtime/8.1.x/
Вот что я хочу поставить в условие:
Если пользователь зашел на сайт менее чем за 15 минут, он в сети.
В противном случае Если пользователь заходил на сайт более 15 минут и менее 30 минут, он отсутствует.
В противном случае он не работает.
пользователь - полный. html .twig:
{% if ??? %}
<div class="mt-2 text-center font-weight-bold font-italic text-success">
<i class="fa fa-circle fa-lg"></i> Online
</div>
{% elseif ??? %}
<div class="mt-2 text-center font-weight-bold font-italic text-warning">
<i class="fa fa-circle fa-lg"></i> Absent
</div>
{% else %}
<div class="mt-2 text-center font-weight-bold font-italic text-danger">
<i class="fa fa-circle fa-lg"></i> Offline
</div>
{% endif %}
ОБНОВЛЕНИЕ 1
Следующий код отображает «метку времени» последнего доступа:
{{ user.access.value }}
Следующий код отображает текущую «временную метку»:
{{ 'now'|date('U') }}
Как рассчитать и отобразить правильный статус?
https://twig.symfony.com/doc/3.x/templates.html#math
ОБНОВЛЕНИЕ 2
Ответ работает, вот результат операция:
{{ date().timestamp }}
{{ user.access.value }}
{{ (date().timestamp - user.access.value) }}
Но возникает проблема, если я перезагружаю страницу, номер никогда не меняется. Чтобы обновить его, я должен очистить кеш.
{% if (date().timestamp - user.access.value) < 900 %}
<div class="mt-2 text-center font-weight-bold font-italic text-success">
<i class="fa fa-circle fa-lg"></i> Online
</div>
{% elseif (date().timestamp - user.access.value) < 1800 %}
<div class="mt-2 text-center font-weight-bold font-italic text-warning">
<i class="fa fa-circle fa-lg"></i> Absent
</div>
{% else %}
<div class="mt-2 text-center font-weight-bold font-italic text-danger">
<i class="fa fa-circle fa-lg"></i> Offline
</div>
{% endif %}
ОБНОВЛЕНИЕ 3
В настоящее время я использую представление с EVA и кеш представления отключен.
Я хочу воспроизвести то же поведение непосредственно в TWIG. Код ответа работает, но я хочу отключить кэш для элемента статуса пользователя (онлайн, отсутствует, оффлайн).
Я добавил приведенный ниже код в файл bootstrap_subtheme_front_office_old.theme
моей подтемы.
It не правильно, как нацелиться только на код статуса?
/**
* User online status.
*/
function bootstrap_subtheme_front_office_old_preprocess_block(&$variables) {
if ($variables['plugin_id'] == 'block_id') {
$variables['#cache']['max-age'] = 0;
}
}