In-Portal Developers Guide

This is a wiki-based Developers Guide for In-Portal Open Source CMS. The purpose of this guide is to provide advanced users, web developers and programmers with documentation on how to expand, customize and improve the functionality and the code the In-Portal software. Please consider contributing to our documentation writing effort.

K4:Счётчики

From In-Portal Developers Guide

Jump to: navigation, search
База данных База данных
Статьи в этой категории

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

Image:Tipbox Icon.gif Перед использованием счётчика требуется создать запись, описывающую счётчик в таблице 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 результаты подсчётов и в последствии не повторяет тот-же самый запрос и тем самым уменьшает нагрузку производимую сайтом на сервер, а так-же через это уменьшает время требуемое для показывания сайта".

См. также