Данный функционал считаю очень полезным, так как позволяет проводить анализ на КАЧЕСТВО трафика и соответственно благодаря такому функционалу - намного легче определять какие пути продвижения дают эффект, а какие нет и на которые не стоить тратить своё время.
Надеюсь вы серьезно отнесетесь к данному вопросу, так как это один из ключевых моментов в пользу HostCms.
FrostVS, подобная функциональность очень легко добавляется руками
Где-то в общем для всего сайта месте, например, в макете (а еще лучше в bootstrap.php или main_classes.php) при каждом запросе мы смотрим в реферрер и в сессию. В сессии мы храним значение реферрера, т.е. если у нас в сессия уже создана, и соответствующий элемент массива $_SESSION существует, то мы считаем, что у пользователя это просмотр уже как минимум второй страницы на сайте. Если сессия не создана или нужный нам элемент не объявлен, то получаем значение referrer и сохраняем его в сессию.
А в момент сохранения заказа просто добавляем эту информацию в комментарий к заказу - это делается изменением кода обработчиков ПС.
Вместо сессии можно (и, наверное, даже нужно) использовать куку.
Для HostCMS 5 я реализовывал такую штуку, могу попробовать выдрать пример, (если у меня доступы к тому проекту еще остались), для HostCMS не писал, но принцип тот же.
РУками это если есть мозги, а в программировании ни бум, бум ((
Вот с кукой наверное лучше и добавлять то нужно не в комент заказчика эти данные, а в отдельное поле (например источник), хотя конечно можно и в коментарий - после если вдруг что коментария заказчика.
Если для hostcms5 осталась ещё такая штука - попробуйте выдрать тот пример, если у вас доступы остались.
Вот с кукой наверное лучше и добавлять то нужно не в комент заказчика эти данные, а в отдельное поле (например источник), хотя конечно можно и в коментарий — после если вдруг что коментария заказчика.
Если мне не изменяет память, до добавлялось это в поле техникал инфо.
И в письме, приходящем к админу магазина приписывалась referrer-ссылка, и отдельными строками поисковик и поисковый запрос, по которому юзер пришел. Реализовано было на редакции Корпорация, хотя, если нам достаточно просто url referrer в явном виде, то можно на любой.
Доступы к коду проверю на днях.
Ну что же, я не забыл про свое обещание, и доступы у меня еще не протухли
А посему вот вам копипейст с работающего решения.
Решение будет работать на любой редакции, но для получения дополнительных плюшек в виде определения поисковой системы и запроса, по которому пришел пользователь требуется редакция не ниже чем Бизнес.
Для начала нам нужен код, который будет перехватывать данные о входе пользователя на сайт. На сайте, откуда я скопировал пример, он подключается в каждом макете, до доктайпа и тега <html>, но логичнее было бы вынести его еще выше - в main_classes.php, чтобы повысить процент отлова, да просто чтобы было удобнее.
// запускаем сессию, если ее нет
if (session_id() == '')
{
@session_start();
}
// если в сессии еще не сохранен enter_url, то вероятнее всего, мы только что в первый раз вошли на сайт
if (!isset($_SESSION['enter_url']))
{
// определим alias текущего сайта
$current_alias = '';
$site = &singleton('site');
$alias = $site->GetCurrentAlias(CURRENT_SITE);
$alias_row = $site->GetAlias($alias);
if ($alias_row)
{
$current_alias = $site->GetCurrentAlias($alias_row['site_id']);
}
// хотя вообще-то можно было просто сложить HTTP_HOST и REQUEST_URI
// сохраним в сессию реферрер
$_SESSION['referrer'] = to_str($_SERVER['HTTP_REFERER']);
// если у нас редакция с модулем "Счетчик" и модуль активен
// то попытаемся определить поисковик, с которого пришел пользователь,
// и поисковый запрос, по которому он пришел
if (class_exists('counter'))
{
$counter = &singleton('counter');
$search_query = $counter->IsSearchSystem(to_str($_SERVER['HTTP_REFERER']));
if ($search_query)
{
$_SESSION['search_system'] = $search_query['search_system'];
$_SESSION['search_query'] = $search_query['search_query'];
} else
{
// если запрос и поисковик определить не удалось
if ($_SESSION['referrer'] == '')
{
// и если реферрер пуст,
// то скорее всего пользователь набрал адрес руками или пришел по закладке в избранном.
$_SESSION['typein_traffic'] = 'Адрес сайта набран вручную, или выбран из закладок браузера';
}
}
}
}
Теперь, если дело дошло до оформления заказа, то нам надо сохранить эту информацию в заказ.
На сайте-доноре кода она сохранялось в поле "Данные об отправлении". Просто потому что это поле там было не нужно ни для чего другого.
Для того чтобы сохранить эту информацию, нужно дописать совсем немного кода _в_каждом_ обработчике платежной системы, которые у вас используются.
Найдите в коде обработчика вызов метода ProcessOrder().
Обычно он окружен условием вида
// Если заказ еще не был оформлен
if ($_SESSION['last_order_id'] == 0)
{
/* Оформляем заказ */
$order_id = $shop->ProcessOrder($shop_id, $site_users_id, $system_of_pay_id, $order_row);
}
Прямо над этим условием вставьте следующий код:
if (isset($_SESSION['enter_url']))
{
$order_row['shop_order_sending_info'] .= "\n" . 'Страница входа на сайт: ' . $_SESSION['enter_url'];
FrostVS, читайте мое сообщение внимательнее Kotoff писал(а):
Решение будет работать на любой редакции, но для получения дополнительных плюшек в виде определения поисковой системы и запроса, по которому пришел пользователь требуется редакция не ниже чем Бизнес.
То чего вам достаточно как раз таки будет работать даже в Халяве.
FrostVS, да прочитайте же вы наконец мои слова до конца! Kotoff писал(а):
для получения дополнительных плюшек в виде определения поисковой системы и запроса, по которому пришел пользователь требуется редакция не ниже чем Бизнес.
Первая дополнительная плюшка - это строка "источник: yandex.ru" на моем скриншоте
Вторая дополнительная плюшка - это строка "поисковый запрос: НАСОС АГРЕГАТ КМ 80-65-160" на моем скриншоте.
В редакциях ниже чем Бизнес этих двух строк (и _только_ этих двух строк) не будет.