Separator

 

Bitrix: подсчёт просмотров, скачиваний

Если перед вами встала задача подсчитывать с помощью Битрикса количество просмотров, скачиваний или других произвольных событий, то предлагаю ознакомиться с готовым решением. Нам понадобится:
  • Создать новый инфоблок без доп. свойств
  • Прописать где-либо константу IB_CONTENT_COUNTERS, равную ID нового инфоблока
  • В нужном месте подключать и использовать класс, приведенный ниже
А вот и он
class ContentCounter
{
 static function Inc($content)
 {
  $arCounter = self::Get($content, true);
  
  if ( $arCounter )
  {
   $ibe = new CIBlockElement;
   $ibe->Update(
    $arCounter['ID'],
    array('SORT' => $arCounter['SORT']+1)
   );
  }
  else
  {
   self::Create($content);
  }
 }
 
 static function Get($content, $full = false, $type = 'text')
 {
  $arCounter = CIBlockElement::GetList(
   array(),
   array(
    'IBLOCK_ID' => IB_CONTENT_COUNTERS,
    'CODE' => $type == 'text'
     ? md5($content)
     : $content,
   )
  )->GetNext();
  
  if ( ! $arCounter )
   return false;
  
  return $full ? $arCounter : $arCounter['SORT'];
 }
 
 private static function Create($content, &$ibe = null)
 {
  $ibe = new CIBlockElement;
  return $ibe->Add(array(
   'ACTIVE' => 'Y',
   'IBLOCK_ID' => IB_CONTENT_COUNTERS,
   'SORT' => 1,
   'NAME' => $content,
   'CODE' => md5($content),
  ));
 } 
}
Пример использования: Поставим задачу считать кол-во просмотров полноразмерных изображений (представим что на сайте есть какой-нибудь fancybox). При открытии полноразмерного изображения выполняем ajax-запрос к скрипту следующего вида:
// Нужен битрикс
include $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php';

// Нужен класс
include $_SERVER['DOCUMENT_ROOT'].'/путь/к/скрипту/где/есть/класс/ContentCounter';

// Предположим что у картинки есть уникальное слово, по которому
// вы в админке сможете опознать, что клик был произведен именно
// по ней, предположим, что мы передали его в поле CODE,
// тогда "считаем" так:
ContentCounter::Inc($_REQUEST['CODE']);
Вот и все. В результате в админке, в инфоблоке счётчиков будет создан\обновлён элемент с названием из переданного CODE.
ps. Естественно, этот функционал весьма прост и многого не учитывает, но и его простота может много где пригодиться, хотя бы в роли основы.

Комментариев нет:

Отправить комментарий