Фильтр stats
Описание
Фильтр stats позволяет накапливать и выводить некоторую статистическую информацию, например, находить сумму элементов, вычислять средние арифметические, подсчитывать количество и т.д.
Пример:
<list:list> <list:item>{$val|stats:"ttl"} </list:item> </list:list> Total:{$bogus|stats:"ttl","sum"}
Здесь stats фильтр будет накапливать значения переменной val и затем выведет сумму элементов.
В рамках фильтра stats есть понятие контекста - это как бы название экземпляра фильтра. Все упоминания фильтра с указанных контекстом будут применены к одному из экземлятов. В нашем примере мы использовать контекст ttl, который указывается первым параметров фильтра.
Вторым параметром указывается режим работы фильтра. Если режим не указан, тогда значение базы для фильтра будет просто прибавлено к уже накомленному результату.
Фильтр stats реализован как набор одиночек, поэтому многочисленные вызовы этого фильтра для каждого контекста в рамках одного шаблона используют один и тот же экземпляр объекта.
Синтаксис
{$var|stats:context_name [,mode]}
Параметры
- context_name - имя контекста.
- mode (опционально) - режим.
Список доступных режимов:
- acc - используется по-умолчанию. Добавляем значение базы в текущему состоянию и выводит только что добавленное значение в шаблон.
- accq - то же самое, что и первый вариант, только не выводит значение полученной суммы. Пользоваляет просто накапливать статическую информацию, не выводя ее.
- sum - выводит сумму элементов
- avg - выводить среднее арифметическое элементов
- count - выводит количество добавленных элементов
- stdev - выводит среднее отклонение по методу n-1.
- stdevp - выводит среднее отклонение.
- reset - сброс данных фильтра.
Пример использования
Шаблон stats.html (обратите внимание на режи accq)
<list:list id="List"> <list:item>{val} - {$val|stats:"aq","accq"}</list:item> </list:list><br/> Total:{$bogus|stats:"aq","sum"}';
Поставим некоторые данные в шаблон:
$template = new WactTemplate('stats.html'); $template->setChildDataset('List', array(array('val'=>10),array('val'=>20),array('val'=>30))); $template->display();
Получим:
10- 20- 30- Total: 60

Обсуждение