5.4. Счётчики

Data Source

K4 позволяет достаточно гибко задавать любые Count SQLs (они же счётчики) и в последствии их использовать где потребуется. Счётчики применяются в основном для подсчёта количества записей (в таблице) используя пользовательский (custom) sql запрос.

Примечание

Перед использованием счётчика требуется создать запись, описывающую счётчик в таблице Counters.

5.4.1. Использование

  • Переданные, при вызове счётчика, параметры можно получить в поле 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>));

5.4.2. Зачем использовать

Может возникнуть вопрос: «почему надо использовать этот механизм, а не писать самому вызов sql например в тэге (tag), который вызывается из блока (параметр render_as) для PrintList?». Ответ довольно прост: «механизм о котором идёт речь также автоматически записывает в cache результаты подсчётов и в последствии не повторяет тот-же самый запрос и тем самым уменьшает нагрузку производимую сайтом на сервер, а так-же через это уменьшает время требуемое для показывания сайта».

См. также