Visitors: Посетители

Компонент: Visitors: Посетители

Каждому владельцу сайта интересно знать: откуда на сайт пришел посетитель, и что его на сайте заинтересовало?

Особено ценна такая информация о посетителях, которые становятся клиентами. Если клиент сделал заказ через форму на сайте, то нет никаких проблем передать вместе с данными формы информацию о реферере и пути по сайту. Но вот что делать, если клиент звонит по телефону? Расспрашивать его об источнике информации о сайте? О пути по сайту?

Клиенту это вряд ли понравится: он звонит ради своих интересов, а не ради интересов владельца сайта.

Компонент Visitors решает эту проблему. На сайте, где-нибудь в незаметном, но легко обнаруживаемом месте, отображается некий уникальный для каждого посетителя числовой идентификатор.

И менеджеру, принимающему заказы по телефону, остается только попросить клиента продиктовать его. По этому идентификатору он легко получает всю необходимую информацию: откуда пришел клиент, по какому запросу (если с поисковой системы), какие страницы сайта посещал.

Установка и настройка счетчика

Необходимые плагины для работы счетчика

Для работы счетчика необходима установка jquery-плагина cookie.js. Если он у вас ранее не был установлен, то необходимо его прописать в лэйауте (layouts). Помимо этого, надо загрузить файл watch.js из установочного пакета компонента. Эти плагины должны вызываться на всех страницах сайта, где будет работать счетчик.

$this->use_script(CMS::component_static_path('scripts/cookie.js', 'Visitors'));
$this->use_script(CMS::component_static_path('scripts/watch.js', 'Visitors'));

В файл css со стилями сайта необходимо поместить стили для плашки с выводимым номером посетителя. Например:

#visitor_number {
  position: fixed; bottom: 0; left: 10px; padding: 2px 10px 2px 10px;
  background-color: #47484c; color: #d7d7d9; font-size: 13px; z-index: 1000;
}
#visitor_number .visitor_uid { font-weight: bold; color: #d7d7d9; }

Далее, необходимо скопировать код, представленный ниже, и поставить его на всех страницах сайта перед закрывающим тэгом </body>.

<div id="visitor_number"> Номер посетителя: <span class="visitor_uid"></span> </div>
<script type="text/javascript"><!--
  $(function($){ $.detect_visitor(1, {order: 0}); });
//--></script>

Если требуется только сбор статистики по посещениям страниц, то блок с номером посетителя можно не выводить. Статистика при этом будет собираться и выводиться в администраторе.

Фиксация обращений с форм сайта

Существует два способа.

1. Вызывать php-функцию после отправки формы.

Для отправки данных через php в контроллере Component_Visitors_Controller существует метод set_order(). Чтобы, например, фиксировать все обращения со стандатных форм компонента Forms надо вызвать метод on_after_insert($post):

// app/components/Forms/app/Forms/Controller.php

...
	public function on_after_insert($post)
	{
	  Core::load('Component.Visitors.Controller');
	  Component_Visitors_Controller::set_order();
  	 }

2. Передача данных после отправки формы в виде яваскрипт-кода.

На результирующих страницах обращений (которые грузятся после того, как посетитель сайта отправил обращение или заказ) необходимо в код счетчика передавать параметр order равный 1. То есть вместо строки

$(function($){ $.detect_visitor(, {order: 0}); });

должно стоять

$(function($){ $.detect_visitor(, {order: 1}); });

В случае, если форма отправляется скриптом, то после отправки можно просто вызвать функцию detect_visitor c нужным параметром. Например:

$(function($){

  function on_sumbit() {
    //...
    $.detect_visitor(1, {order: 1});
    }
  });

Далее надо добавить в крон необходимые вызовы.

Настройка крона

В кроне следует настроить скрипт очистки и скрипт формирования отчетов.

0 1 * * * (cd /путь к www/www; /usr/bin/php index.php move_outdated)
0 3 * * * (cd /путь к www/www; /usr/bin/php index.php fill_urls_stat)

Где

  • move_outdated - скрипт удаляет устаревшие данные о пользователях. Таковыми считаются лица, не сделавшие заказ за указанное количество дней.
  • fill_urls_stat - скрипт отвечает за формирование отчетов по utm-меткам.

Количество дней, через которое информация о пользователях считается устаревшей, можно изменить в администраторе, заполнив соответствующее поле на форме добавления/редактирования проекта. По умолчанию срок 45 дней (для того чтобы успеть залить ежемесячные отчеты о звонках от клиентов).

Дополнительные возможности

После определения идентификатора генерируется javascript-событие visitor_detect, которое можно отследить с помощью jquery и сделать какие-то действия. Например, можно воспользоваться данным событием при формировании кода купона на основе идентификатора посетителя, который затем будет распечатывать пользователь.

$('body').bind('visitor_detect', function(e) {
  alert(e.visitor);
});

Иногда при оформлении заказа через сайт, требуется получить историю перемещения пользователя по сайту.

Для этого достаточно вызвать метод Component_Visitors::history(). Метод вернет массив объектов-урлов с информацией о страницах и времени их посещения. Если функция вызывается без параметра, то история будет определена для текущего посетителя (номер которого записан в куках). Также возможно передать конкретный номер любого посетителя и будет возвращена история именно для него.

Отправка уведомления о заказе по телефону в Google Analytics

Если заказ принимается по телефону, и нужно отследить это действие в Google Analytics, то для этого необходимо произвести следующие действия:

  • Нужно убедиться, что на сайте установлен скрипт Google Analytics нового образца (analytics.js)
  • В настройках компонента (app/components/Visitors/config/visitors.php) нужно добавить массив следующего вида:
// app/components/Visitors/config/visitors.php

	'ga' => array(
		'tracking_id' => 'UA-xxxxxxxx-xx',
		'Y' => 1,
	),

Здесь tracking_id - уникальный ID Google Analytics, его можно найти в коде, предоставляемом GA для размещения на сайте, в следующей строке:

	ga('create', 'UA-xxxxxxxx-xx', 'auto');

Y - идентификатор пользовательской переменной GA, обычно предоставляет интернет-маркетолог.

Для отправки уведомления GA есть три способа:

1. Вызвать статический метод

	Core::load('Component.Visitors.Utils');
	Component_Visitors_Utils::ga_send_call();

Если Метод ga_send_call() вызывается без параметра, тогда номер посетителя будет получен из cookie. В качестве параметра можно передать номер посетителя:

	Component_Visitors_Utils::ga_send_call(100);

2. С помощью javascript

	$.ga_send_call();

Можно также передать номер посетителя с помощью параметра:

	$.ga_send_call(100);

3. Запросить url вида /visitors/ga_send_call/.

Передать номер посетителя можно через параметр: /visitors/ga_send_call/?v=100

Переход со старой версии компонента Visitors на новую

Если требуется переход на новую версию компонента с сохранением всей статистики, следует воспользоваться следующей инструкцией, описанной ниже.

Следует отметить, что в процессе переноса придется на время приостанавливать компонент Visitors на хостинге для корректного переноса старой информации в новую структуру. Однако это время можно минимизировать. Сначала сделать все манипуляции по шагам (до 9 пункта включительно) локально. После отладки на хостинге остановить Visitors, а затем локально остановить отслеживание в лэйауте, локально удалить все таблицы visitors... и old_visitors..., залить свежие с хостинга и проделать все шаги, начиная с 4.

Так как компонент будет уже протестирован, все остальные шаги не займут много времени. Далее необходимо залить visitors таблицы и файлы на хостинг. И останется сделать конвертацию и прочие шаги на самом хостинге (пункт 10 и дальше).

1) Обновить ТАО до актуального состояния.

2) Приостановить старый компонент. Убрать вывод номера посетителя в лэйауте (layout), все его использования закомментировать. Проще всего сделать поиск по слову «Visitors» в проекте. Будут правки, например, в следующем примерном наборе файлов:

  • app/layouts/work.phtml
  • app/components/Forms/Controller.php
  • www/index.php
  • другие, если Visitors использовался нестандартно.

3) Выложить файлы на хостинг. Убрать все скрипты связанные с посетителями из крона (так как данные о заказах еще не сконвертированы). После этого сбор статистики остановится, и мы сможем забрать свежий бэкап таблиц visitors и поднять их локально.

Далее начнем локально ставить новый компонент.

4) Переименовать папку app/components/Visitors в app/components/Visitors_ и файл app/components/Visitors.php в app/components/Visitors_.php.

5) Из app/components/.info удалить (на всякий случай забэкапить себе) файл Visitors...

6) Далее необходимо забэкапить данные таблиц, чтобы они не потерялись.

rename table visitors to old_visitors;
rename table visitors_archive to old_visitors_archive;
rename table visitors_free_ids to old_visitors_free_ids;

7) Теперь установить новый компонент, подключить в index.php и после создания таблицы visitors (проверить ее наличие в базе) прогнать следующий скрипт:

insert into visitors select id, 1, '', ip, last_visit, last_order, '' from old_visitors;
insert into visitors_free_ids select id, 1, 0 from old_visitors_free_ids;

8) Выполнить скрипт:

ALTER TABLE `old_visitors`  ADD COLUMN `move_url` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `last_order`;

9) После этого необходимо локально наладить и проверить работу нового счетчика. Перед выкладкой удалить записи с локальными посещениями (желательно) из базы и закачать все таблицы visitors... на хостинг, перелить скрипты.

10) Далее следует запустить на хостинге в кроне конвертер, который перенесет историю посещений и заказов. Так как данных бывает много, то это может занять длительное время. В скрипте, который сейчас есть в библиотеке, задание выполняется порциями по 1000 посетителей. Рекомендуется поставить в крон эту обработку раз в пять минут. За сутки, таким образом, будет обработано примерно 280 тыс. посетителей. Можете спрогнозировать примерное время окончания конвертации.

*/5 * * * * (cd /путь/www; php index.php convert)

Чтобы проверить перенесены ли уже все данные необходимо сделайть запрос к БД: select count(*) from old_visitors where move_url = 0;. move_url будет равно нулю в этом случае. После этого скрипт из крона надо удалить.

11) Наладить в кроне процесс очистки Visitors.

12) После того как убедились, что все работает правильно - можно удалить лишние файлы (папку с бэкапом app/components/Visitors_) и таблицы БД:

drop table old_visitors;
drop table old_visitors_archive;
drop table old_visitors_free_ids;
Метки: seo
14.08.2014
Все статьи