(PHP+Smarty) Как вычислить разницу дат

Berkut
Дата: 10.07.2006 12:41:22
Привет!

Как в smarty-шаблоне вычислить разницу между $last_time_session (timestamp) и текущей датой ($smarty.now)?

Например, если требуется выделять "активных клиентов" зеленым цветом по тайм-ауту в 20 минут.

Было бы здорово записать одно условие с помощью конструкции {if}.

Или такое возможно только с помощью PHP?
Berkut
Дата: 10.07.2006 15:37:00
Или написать свой модификатор, который в качестве параметра будет принимать timestamp и возвращать разницу во времени? :)
Viktor Bartel
Дата: 10.07.2006 16:01:58
А че ты не ассоциируешь php функцию при создании экземпляра шаблонизатора смарти, которая и вычисляет разницу в между нау и ласт_тайм_сешон? Тока ты вызываешь финкцию из тела шаблона. Вот зацени :).

--
С уважением
Виктор Бартель
Berkut
Дата: 10.07.2006 16:23:52
2 Viktor Bartel

С помощью register_function() не получается, т.к. надо делать проверку в {if}.

Возможно костыль, но работает.

$smarty = &new Smarty;

$smarty->template_dir = ROOT.'/tpls';
$smarty->compile_dir = ROOT.'/tpls_c';

$smarty->register_modifier('is_timeout', 'isTimeoutReached');

...

function isTimeoutReached($ts, $timeout=20)
{
    return mktime(date('H', $ts), date('i', $ts)+$timeout, date('s', $ts), date('m', $ts), date('d', $ts), date('Y', $ts)) <=time();
}

Тогда уже в шаблоне можно делать проверку

{if $b.last_time_session|is_timeout}
    {assign var="bgcolor" value="white"}
{else}
    {assign var="bgcolor" value="#cef8c7"}
{/if}
Viktor Bartel
Дата: 10.07.2006 16:44:58
А... Дык ты задачу поподробнее расписал бы, а то откуда мы знаем что тебе нада проверку делать ) Да вроде должно работать...

--
С уважением
Виктор Бартель
Berkut
Дата: 10.07.2006 17:41:40
Viktor Bartel
А... Дык ты задачу поподробнее расписал бы, а то откуда мы знаем что тебе нада проверку делать )


Berkut
Было бы здорово записать одно условие с помощью конструкции {if}.
:)