Новый шаблон sale.order.ajax: кастомизация

Изображение
На реализацию этого функционала ушло порядка 30 часов рабочего времени (плюс время на самообразование). За это время было отправлено 18 коммитов, написано 371 строк кода и осуществлено несколько попыток виртуального суицида :) Основная задача Создать группу свойств "Параметры доставки", которая будет зависеть от выбора типа доставки. Для курьера это "Адрес доставки", для "Транспортной компании" это выбор ТК из выпадающего списка, для доставки "Другая транспортная компания" - тоже текстовое поле (как и адрес доставки). Все эти поля являются обязательными, и отображаться должны не в блоке "Пользователь", а в блоке с доставками. В новом шаблоне sale.order.ajax перенести поля в другой блок не так просто, как кажется на первый взгляд, а информации на эту тему буквально крупицы.

Подключение механизма определения источника трафика к интернет-магазину на Битрикс

Основная обработка заказов из интернет-магазина в офисе у клиента ведется через интернет. Именно поэтому удобно было, чтобы информация об источнике трафика по заказу выгружалась в одно из свойств заказа, чтобы по ним потом можно было сделать развернутый отчет в 1С.
Да и менеджер сразу увидит, откуда пришел клиент.

Для этого нам нужно добавить к свойствам заказа (Магазин - Настройки - Свойства заказа - Список свойств) текстовое поле "Источник" [ISTOCHNIK].
Примечание: не забудьте проверить, не стало ли отображаться это свойство в форме оформления заказа в публичной части. Если это произошло, отключите вывод этого свойства через настройки компонента.

Теперь присвоим этому полю значение. Делать это будем в файле:
bitrix/templates/28313/header.php (28313 - название нашего шаблона)
Этот файл загружается каждый раз при загрузке любой страницы этого шаблона (можно использовать любой другой подобный файл, если вам это будет удобно, или если на сайте есть разные шаблоны).

В начало файла вставляем код:
<?
//print_r(parse_url($_SERVER['HTTP_REFERER']));
    $host=parse_url($_SERVER['HTTP_REFERER'],PHP_URL_HOST);
    $query=urldecode(parse_url($_SERVER['HTTP_REFERER'],PHP_URL_QUERY));
if (isset($_REQUEST['yclid']) && $_REQUEST['yclid']!='')
{//если в УРЛе есть айди директа
  SetCookie( 'reference', 'DIRECT |'.$host.' |'.$query, time() + 604800, '/', 'site.ru');
}
elseif (isset($_REQUEST['gclid']) && $_REQUEST['gclid']!='')
{//если в УРЛе есть айди адвордса
  SetCookie( 'reference', 'ADWORDS |'.$host.' |'.$query, time() + 604800, '/', 'stie.ru');
}
elseif (isset($_REQUEST['from']))
{//если в УРЛе есть признак источника
  SetCookie( 'reference', 'FROM |'.$_REQUEST['from'], time() + 604800, '/', 'site.ru');
}
else
{
  if (!(strstr($_SERVER['HTTP_REFERER'],'http://site.ru') || strstr($_SERVER['HTTP_REFERER'],'http://www.site.ru') || strstr($_SERVER['HTTP_REFERER'],'subscribe.site.ru') || $_SERVER['HTTP_REFERER']==''))
  {//если источник не сам сайт и не прямой заход, то пишем его в куки
    SetCookie( 'reference', 'SITE|'.$host.'|'.$query, time() + 604800, '/', 'site.ru');
  }
}
//echo @'<font color=white>'.$host.'|'.$query.'</font>';
  //echo @'<font color=white>Был переход с '.$_SERVER['HTTP_REFERER'].'</font><br>';
  //echo @'<font color=white>В куках '.$_COOKIE['reference'].'</font>';
?>
Это позволяет нам получить значение поля вида ИСТОЧНИК | сайт | запрос, а в случае необходимости мы можем использовать параметр from (например, в адресной рассылке использовать ссылки вида http://site.ru/?from=email_april - тогда значение email_april сохранится в поле и мы увидим, что клиент пришел из апрельской рассылки).

Внимание: при переносе на ваш сайт все значения типа site.ru следует заменить на доменное имя вашего сайта (без WWW).

Каждый раз, когда клиент приходит с другого источника, поле источник перезаписывается на более актуальное значение.

Как записать значение куки в создаваемый заказ - в следующем посте.

Комментарии

Популярные сообщения из этого блога

Новый шаблон sale.order.ajax: кастомизация

Вывод пользовательского свойства раздела в компонентах catalog.section и news.list

Если при полной выгрузке из 1С в битрикс товары и разделы приходят неактивными