php 5.5+
Проведение A/B-тестов, защищенных от внешнего вмешательства.
Сегмент пользователя устанавливается на длину его сессии (единственный верный вариант при тестировании товарных рекомендаций). Сегмент хранится в сессии PHP. Уничтожается через N часов неактивности пользователя (время устанавливается в php.ini).
Сегмент необходимо добавлять к оформленному заказу в базе данных магазина. Результаты теста считать по выполненным не отмененным заказам.
- Положить файл ServerSideSegmentator.php в папку с вашим проектом и подключить его
Получение сегмента пользователя в контролере
<?php
// Инициализировать эксперимент
$recSegmentator = new ServerSideSegmentator('recommendations', 3);
// Получить сегмент пользователя
$segment = $recSegmentator->getSegment();
?>
Использование в шаблонах:
...
<!-- Сегмент может быть не задан, например для поисковых роботов, поэтому проверяем его наличие -->
<?php if($segment): %>
<?php if($segment == 'A'): ?>
<!-- Показать рекомендер подрядчика № 1-->
<?php endif;?>
<?php if($segment == 'B'): ?>
<!-- Показать рекомендер подрядчика № 2-->
<?php endif;?>
<?php if($segment == 'C'): ?>
<!-- Показать рекомендер подрядчика № 3-->
<?php endif;?>
<!-- Отправить сегмент в Google Analytics -->
<javascript>
ga('set', 'dimension5', '<?php echo $segment ?>');
</javascript>
<?php endif; ?>
...
Запись сегмента в оформленный заказ:
<?php
// ... где-то здесь получили order_id заказа
$order_id = 123;
// Добавляем сегмент к заказу
// Считаем, что у заказа может быть несколько экспериментов, поэтому сегменты пишем в отдельную таблицу "order_segments"
$recSegmentator = new ServerSideSegmentator('recommendations', 3);
$segment = $regSegmentator->getSegment();
if($segment) {
$query = "INSERT INTO order_segments (order_id, segment) VALUES (" . $order_id . ", '" . $segment . "');";
mysql_query($segment);
}
?>