K4:Счётчики
From In-Portal Developers Guide
| ||
---|---|---|
Статьи в этой категории | ||
K4 позволяет достаточно гибко задавать любые Count SQLs (они же счётчики) и в последствии их использовать где потребуется. Счётчики применяются в основном для подсчёта количества записей (в таблице) используя пользовательский (custom) sql запрос.
Перед использованием счётчика требуется создать запись, описывающую счётчик в таблице Counters. |
Использование
- Переданные, при вызове счётчика, параметры можно получить в поле CountQuery написав их в следующем формате:
<%PARAM_NAME%>
, напр.
SELECT COUNT(*) FROM `<%PREFIX%>PortalUser` WHERE `Status`= 1
- Названия таблиц (без префиксов в именах таблиц), изменения в которых ведут за собой сбрасывание конкретного счётчика нужно писать в поле TablesAffected в формате:
|TableName1[|TableNameN]|
(т.е. одна или более таблиц разделённых символом "|" и по одному символу "|" в начале и в конце строки. Обычно это список всех таблиц, которые упоминаются в поле CountQuery.
- Если при вызове в счётчик будут передаваться параметры, то будет создана копия записи счётчика только с 1 в поле IsClone. Это нужно для того, чтобы можно было независимо друг от друга хранить результаты подсчёта одно и того-же счётчика но вызванного с разным набором параметров. Например это удобно, когда требуется посчитать кол-во товаров в определённой подкатегории.
- Если требуется сбросить результаты отдельного (или всех) счётчиков, то надо в поле CountValue записать
NULL
(не слово "NULL
") и смело стереть все счётчики у которых значение поля IsClone равно 1.
В последствии можно вызвать счётчик из любого требуемого места в коде использую конструкцию:
$count_value = $this->Application->getCounter('<COUNTER_NAME>', Array(<COUNTER_PARAMS>));
Зачем использовать
Может возникнуть вопрос: "почему надо использовать этот механизм, а не писать самому вызов sql например в тэге (tag), который вызывается из блока (параметр render_as) для PrintList?". Ответ довольно прост: "механизм о котором идёт речь также автоматически записывает в cache результаты подсчётов и в последствии не повторяет тот-же самый запрос и тем самым уменьшает нагрузку производимую сайтом на сервер, а так-же через это уменьшает время требуемое для показывания сайта".