Для правильной работы всех примеров нужна версия модуля конверсии не ниже 15.5.6
Данный модуль разработал, наш замечательный сотрудник Сухарев Игорь
[spoiler]Создавайте свои "Счетчики"
Конверсия - это отношение числа посетителей сайта, сделавших действие, к общему числу посетителей, выраженное в процентах.
Подсчет числа посетителей в день ведет модуль конверсии таким образом:
$context = Bitrix\Conversion\DayContext::getInstance(); // контекст тукущего дня и текущего пользователя $context->addDayCounter('conversion_visit_day', 1); // прибавить 1 к счетчику 'conversion_visit_day' в этом контексте |
Код мы поместим в 'bitrix/php_interface/init.php'.
class MyConversionHandlers { // накрутка наших счетчиков static function addCounters() { if ($_SERVER['REQUEST_URI'] == '/' && Bitrix\Main\Loader::includeModule('conversion')) { $context = Bitrix\Conversion\DayContext::getInstance(); $context->addDayCounter('my_page_day', 1); // прибавить 1 к счетчику my_page_day один раз в день $context->addCounter ('my_page_all', 1); // прибавить 1 к счетчику my_page_all } } // информация о наших счетчиках для модуля конверсии static function getCounterTypes() { return array( 'my_page_day' => array('MODULE' => 'my', 'NAME' => 'Количество посещений в день', 'GROUP' => 'day'), // дневная группа информирует о счетчике действий 'my_page_all' => array('MODULE' => 'my', 'NAME' => 'Общее количество посещений'), ); } } // регистрируем обработчики в системе $eventManager = \Bitrix\Main\EventManager::getInstance(); $eventManager->addEventHandler('main' , 'OnProlog' , array('MyConversionHandlers', 'addCounters' )); $eventManager->addEventHandler('conversion', 'OnGetCounterTypes', array('MyConversionHandlers', 'getCounterTypes')); |
Он используется для вычисления конверcии.
Метод addCounter накручивает счетчики столько раз, сколько он будет вызван.
Его целесообразно использовать для накопления информационных данных.
Теперь нужно перейти в настройки модуля конверсии и убедиться, что для модуля 'my' стоит галочка учета конверcии.
Это все что нужно, для того чтобы начать подсчет посещений корневой страницы нашего сайта!
Но как нам посчитать и вывести конверсию по этим счетчикам?
Добавим еще один метод в наш класс:
// информация для вычисления конверсии static function getRateTypes() { return array( 'my_page' => array( 'NAME' => 'Посещения главной', 'MODULE' => 'my', 'SORT' => 100, // порядок отображения конверсии 'SCALE' => array(0.5, 1, 1.5, 2, 5), // шкала: Плохо 0% - Отлично 5% // счетчики которые будут переданы в функцию вычисления конверсии 'COUNTERS' => array('conversion_visit_day', 'my_page_day', 'my_page_all'), // функция вычисления конверсии 'CALCULATE' => function (array $counters) { $denominator = $counters['conversion_visit_day'] ?: 0; // знаменатель $numerator = $counters['my_page_day' ] ?: 0; // числитель $quantity = $counters['my_page_all' ] ?: 0; return array( 'DENOMINATOR' => $denominator, 'NUMERATOR' => $numerator, 'QUANTITY' => $quantity, 'RATE' => $denominator ? $numerator / $denominator : 0, // формула конверсии ); }, ), ); } |
Зарегистрируем новый обработчик:
$eventManager->addEventHandler('conversion', 'OnGetRateTypes' , array('MyConversionHandlers', 'getRateTypes' )); |
Все!
Теперь конверсия по нашим счетчикам будет посчитана и отображена на странице пульса конверсии.
Таким несложным способом вы сможете добавлять свои счетчики.
Контекст
Контекст — это уникальный набор атрибутов.
Эти атрибуты задаются для каждого пользователя и действуют в течение дня.
Все счетчики накручиваются в рамках определенного контекста и дня.
Например модуль конверсии устанавливает атрибуты контекста таким образом:
$context = Bitrix\Conversion\DayContext::getInstance(); $сontext->setAttribute('conversion_site', $siteId); // задает атрибуту 'conversion_site' значение переменной $siteId |
Благодаря этому атрибуту мы сможем отфильтровать все счетчики только по определенному сайту.
Допустим мы можем определить настроение и пол человека зашедшего на наш сайт, для простоты сгенерируем эти данные случайным образом.
Добавим два новых метода в класс MyCnversionHandlers:
// установка наших атрибутов контекста static function setDayContextAttributes(Bitrix\Conversion\DayContext $context) { // установить атрибут 'my_mood' со значением от 1 до 3 $context->setAttribute('my_mood', rand(1, 3)); // установить атрибут 'my_male_gender' или 'my_female_gender' без значений $context->setAttribute('my_'.(rand(0, 1) ? '' : 'fe').'male_gender'); } // информация о наших атрибутах для модуля конверсии static function getAttributeTypes() { return array( 'my_mood' => array( 'NAME' => 'Настроение', 'MODULE' => 'my', 'SORT' => 100, // порядок установки атрибутов 'GET_VALUES' => function (array $ids) // информация по значениям атрибута { $values = array(); $moods = array( 1 => array('NAME' => 'Плохое' ), 2 => array('NAME' => 'Нормальное'), 3 => array('NAME' => 'Хорошее' ), ); foreach ($ids as $id) if (isset($moods[$id])) $values[$id] = $moods[$id]; return $values; }, ), 'my_male_gender' => array( 'NAME' => 'Мужчины', 'MODULE' => 'my', 'SORT' => 200, 'GROUP' => 'gender', // группировка атрибутов 'BG_COLOR' => '#be6ac4', // цвет шапки атрибута на странице пульса конверсии 'SPLIT_BY' => 'my_mood', // вывод в разрезе настроения на детальной странице ), 'my_female_gender' => array( 'NAME' => 'Женщины', 'MODULE' => 'my', 'SORT' => 300, 'GROUP' => 'gender', 'BG_COLOR' => '#4bbedb', 'SPLIT_BY' => 'my_mood', ), ); } |
И зарегистрируем наши обработчики:
$eventManager->addEventHandler('conversion', 'OnSetDayContextAttributes', array('MyConversionHandlers', 'setDayContextAttributes')); $eventManager->addEventHandler('conversion', 'OnGetAttributeTypes' , array('MyConversionHandlers', 'getAttributeTypes' )); |
Теперь наши атрибуты контекста будут устанавливаться для каждого пользователя каждый день.
Если мы сегодня уже заходили на наш сайт, до того как мы добавили новые атрибуты, то контекст для нас уже установлен без наших атрибутов.
Чтобы переопределить контекст не дожидаясь следующего дня, нужно очистить куки PHPSESSID и BITRIX_CONVERSION_CONTEXT для нашего сайта в браузере.
Если сейчас зайти на страницу пульса конверсии, то в выпадающем меню где: "Источники с которых заходили" и "Устройства с которых заходили" появится новый пункт 'gender'.
Чтобы задать более понятное название нашей группе 'gender', нужно добавить еще один метод:
// информация о группах для модуля конверсии static function getAttributeGroupTypes() { return array( 'gender' => array('NAME' => 'Пол', 'SORT' => 300), ); } |
И зарегистрировать его в системе:
$eventManager->addEventHandler('conversion', 'OnGetAttributeGroupTypes' , array('MyConversionHandlers', 'getAttributeGroupTypes' )); |
Как вы уже видели, атрибуты могут иметь, а могут и не иметь значений.
Все зависит от того как вы решите организовать и выводить данные.
Например мы могли бы не вводить два атрибута без значений: "my_male_gender" и "my_female_gender", а обойтись одним: "my_gender", со значениями: "male" и "female".
Но в этом случае существует ряд ограничений
- Например если создатель другого модуля решит, что ему нужен еще один вариант атрибута в группе "gender", то он не сможет попросту добавить еще один "his_neuter_gender" атрибут в своем модуле, ему придется править нашу реализацию.
Также на странице пульса конверсии можно делать срез только по самим атрибутам, имеющим общую группу, а не по их значениям
Также это вовсе не означает, что атрибуты с группой не должны иметь значений.
Например модуль конверсии определяет атрибут "Органический трафик" в группе "Источники с которых заходили", со значениями в виде поисковых систем.
Несколько других модулей добавляют свои атрибуты в эту группу таким же образом.
А как раз на детальной странице делается срез по значениям этих атрибутов.
Итак главное:
- Атрибуты имеющие GROUP будут доступны на странице пульса конверсии.
- На детальной странице в данный момент реализована выборка по атрибуту имеющему значения, указанному в поле SPLIT_BY, но в будущем будет добавлена возможность строить сложные фильтры с различными вариантами атрибутов и значений.
- Если несколько атрибутов имеющих одну группу будут установлены, то будет использован тот атрибут, у которого поле SORT будет наименьшим.
Полный листинг файла bitrix/php_interface/init.php вы можете найти по ссылке:
Задавайте свои вопросы в комментариях, мы с Игорем на них с удовольствием ответим!
.
Так как же заработать партнеру на модуле конверсия?
Лучше бы вы привели реальный боевой пример
Сейчас создается полное ощущение, что кроме информационной модели и программной реализации за душой модуля нет ничего.
Я понимаю, что он только с конвеера, но неужели нет ни одного партнера и ни одного проекта, на котором данная технология бы уже прошла практическую аппробацию?
теперь более конкретные вопросы
1. дружба с композитом и др. Все ок?
2. какие дополнительные сервисы вне сайта модуль будет дергать?
3. Теперь уже постоянный вопрос от некоторых моих клиентов: А какая информация при этом будет уплывать в облака (если будет уплывать) и где физически находятся эти облака, все еще на амазоне или уже все 100% в России. Или асболютно все будет храниться и обрабатываться в пределах сервера клиентов?
4. Если все хранится и обрабатывается только на сервере клиента, то насколько вырастет прогнозная нагрузка из расчета на одну тыс посетителей. Т.е. какие проблемы по производительности могут быть или не быть?
А то народ назапускает на виртуальных хостингах, а потом получает приветы от хостеров
5. насколько гарантированно "состоялись" АПИ данного модуля и не претерпеют ли они изменений в следующем релизе? Было бы неприятно получить ахтунги и варнинги на сайтах клиентов при обнолвениях Битрикс.
Лично меня как разработчика интересует больше пятый вопрос, который для меня больше греет душ у в такой формулировке
Если я сегодня или завтра использую данную технологию на своем проекте, могу я быть увереным, что вы не ее переиграете, не измените АПИ? Не придется ли мне караулить каждый релиз, чтобы убедиться, что все ок и ничего не сломалось?
Я понимаю, что он только с конвеера, но неужели нет ни одного партнера и ни одного проекта, на котором данная технология бы уже прошла практическую аппробацию?
Реальные примеры привести скорей вы должны, в данном случае отлично работает притча, про вопрошающего к господу, когда бог давал ему инструмент в виде удочки например, а вопрошающий ждал уже готовой пойманной рыбы.
Мы дали инструмент и рассказали, как в этом инструменте добавлять учет своих данных и доказывать клиенту, что предложенное например вами решение дает ему пользу. Ведь если клиент видит, что вы дали ему реальную пользу, он проще расстается с деньгами.
1. дружба с композитом и др. Все ок?
Спасибо вам за интерес проявленный к статье, и к новому модулю. Будем ждать от вас реальные кейсы внедрений, со своей стороны могу пообещать совместную статью в этом блоге, если вы будете делать такие реализации.
но
Я реально спросил - покажите мне уже поймавших
Или если в магазине вам подсунут рыбку с тухлятинкой, но в то же время рыбку, то вы ведь будете говорить совершено по другому ?
поэтому уточнил вопрос и про сабж тоже и про то, что лабораторные испытания на реальных проектах или мнимых крысках.
Посмотрим как можно прикрутить данный модуль с пользой для дела.
Модуль есть и уже приносит пользу, даже если вы не добавите не одного счетчика от себя. Цель статьи показать, что вы как разработчик, сможете прикрутить учет хотелок клиента.
Со своей стороны я готов желающего с кейсом попирать, рассказав, что получилось и как и какую пользу получает клиент.
Ну может и кейс получится соответствующий.
Но не я первый начал
Но я вам даже написал
Механизмы мы готовы даже улучшать, если будут интересные просьбы, которые будут помогать не узкому проекту, а всем разработчикам. Поэтому пишите, как будет идти реализация, всегда поможем.
По добавлению корзины бак подправили, считает корректно, через некоторое время выйдет в обновление.
По удалению подумаем.
А где найти эту волшебную версию модуля "Конверсия" 15.5.6?
Последняя стабильная 15.5.5:
В бетах ее тоже не видно
Почему привязка идет именно к оплате заказа? Почему нельзя привязаться к сменен статуса?
А самое смешное, что датой конверсии становится не дата заказа, а дата оплаты. Если я провел рекламную кампанию и нагнал людей, они сделали заказы, а потом оплата пришла через неделю, когда посетителей у меня в разы меньше, что наблюдаем? Конечно, значительный рост конверсии.