Задачи бывают разные:
Черные, белые, красные.
Но всем одинаково хочется -
На что-нибудь заморочиться
Клиент обратился с просьбой запилить такой функционал, чтоб в свойствах заказа попадала информация о том откуда пришел пользователь. По скайпу на меня смотрел клиент со страхом в глазах ,в ожидании услышать стоимость разработки. А я тем времени, смотрел на него уставшими и утонувшими в подглазных мешках глазами. Конечно, это простая задача. Но, у него такой сайт, такое решение от АСПРО, простая задача превращалась в среднюю. Средняя в тяжелую. Тяжеля - невыполнимую. После обсуждения цены прилег на диван дабы обмозговать задачу....
В итоге через несколько дней получилось вот что:
1. Создаем новое свойство в заказе.
В описании пишем utm метки. можно ссылку. Также пишем три обязательных пункта.
Клиент обратился с просьбой запилить такой функционал, чтоб в свойствах заказа попадала информация о том откуда пришел пользователь. По скайпу на меня смотрел клиент со страхом в глазах ,в ожидании услышать стоимость разработки. А я тем времени, смотрел на него уставшими и утонувшими в подглазных мешках глазами. Конечно, это простая задача. Но, у него такой сайт, такое решение от АСПРО, простая задача превращалась в среднюю. Средняя в тяжелую. Тяжеля - невыполнимую. После обсуждения цены прилег на диван дабы обмозговать задачу....
В итоге через несколько дней получилось вот что:
1. Создаем новое свойство в заказе.
В описании пишем utm метки. можно ссылку. Также пишем три обязательных пункта.
2. Пишем код в /bitrix/php_interface/init.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | <? /* Функция сохраняет откуда прищел пользователь */ //analitics_Unset(); //Запускаем шарманку! //analitics_Set(); //пример использования события OnSaleOrderBeforeSaved // function analitics_Init(){ if ( $_SESSION["REFERER"] !="" )return true; //Проверяем на наличие utm меток $arUtm = getAnaliticsData(); if( !is_array($arUtm)) return false; $ret = false; foreach($arUtm as $id => $arr){ if(strpos($_SERVER['REQUEST_URI'] , $arr['HREF']) !== false ){ $_SESSION["REFERER"] = $arr['CODE']; $_SESSION["REFERER_PERFIX"] = $arr['PERFIX']; $ret = true; break; } } if($ret) return true; //Некоторые данные которые не описать в свойствах if (isset($_GET["frommarket"])) { // Яндекс Маркет $stFromTransition = "yandext"; $_SESSION["REFERER_PERFIX"] = 1; } else if (strripos($_SERVER["HTTP_REFERER"], "google.") !== false) { // Переход с google $stFromTransition = "gp"; $_SESSION["REFERER_PERFIX"] = 7; } else if (strripos($_SERVER["HTTP_REFERER"], "yandex.ru") !== false) { // Переход с yandex $stFromTransition = "jp"; $_SESSION["REFERER_PERFIX"] = 6; } else if (strripos($_SERVER["HTTP_REFERER"], "go.mail.ru") !== false) { // $stFromTransition = "mp"; $_SESSION["REFERER_PERFIX"] = 10; } else if (strripos($_SERVER["HTTP_REFERER"], "search.yahoo.com") !== false) { // $stFromTransition = "yahoo"; $_SESSION["REFERER_PERFIX"] = 11; } else if ($_GET["utm_source"]) { $stFromTransition = $_GET["utm_source"]; } else if (!$_SERVER["HTTP_REFERER"] && !$_GET) { // Прямой переход $stFromTransition = "url"; $_SESSION["REFERER_PERFIX"] = 8; } $_SESSION["REFERER"] = $stFromTransition; } //Для тестирования function analitics_Set(){ $_SESSION["REFERER"] ="jp"; $_SESSION["REFERER_PERFIX"] = 6; } //Обнуление данных. Вызывается после оформления заказа! function analitics_Unset(){ $_SESSION["REFERER"] = null; $_SESSION["REFERER_ID"] = null; $_SESSION["REFERER_DATA"] =null; } //Возвращает перфикс метки в системе. function analitics_GetPerfix(){ if($_SESSION["REFERER_PERFIX"] >0){ return $_SESSION["REFERER_PERFIX"].'-'; } return ''; } //Возращает код значения function analitics_Getdata(){ return $_SESSION["REFERER"]; } //Добавляеи или обновлять свойство в заказе function AddOrderPropertyExt($code, $value, $order) { if (!strlen($code)) { return false; } if (CModule::IncludeModule('sale')) { $arProp = CSaleOrderProps::GetList(array(), array('CODE' => $code))->Fetch(); $arOrderSourceValue = CSaleOrderPropsValue::GetList(array(), array("ORDER_ID" => $order,"ORDER_PROPS_ID" => $arProp['ID']))->Fetch(); if ($arOrderSourceValue["ID"]){ echo 'update'; echo $arOrderSourceValue["ID"]; CSaleOrderPropsValue::Update($arOrderSourceValue["ID"], array("VALUE" => $value)); } else{ CSaleOrderPropsValue::Add(array( 'NAME' => $arProp['NAME'], 'CODE' => $arProp['CODE'], 'ORDER_PROPS_ID' => $arProp['ID'], 'ORDER_ID' => $order, 'VALUE' => $value, )); } } } /* Возращает список utm меток из свойства REFER */ function getAnaliticsData(){ $cache = new CPHPCache(); $cache_time = 0; $cache_id = 'analitics_data5'; $cache_path = 'analitics_data5'; if ($cache_time > 0 && $cache->InitCache($cache_time, $cache_id, $cache_path)){ $res = $cache->GetVars(); if (is_array($res["data"]) && (count($res["data"]) > 0)) return $res["data"]; } $arReturn = []; if (CModule::IncludeModule('sale')) { $property_enums = CSaleOrderProps::GetList([], [ "CODE"=>"REFER"]); while($enum_fields = $property_enums->Fetch()){ $db_vars = CSaleOrderPropsVariant::GetList( ($by="SORT"), ($order="ASC"), [ "ORDER_PROPS_ID"=>$enum_fields["ID"] ] ); while ($vars = $db_vars->Fetch()){ $perfix = ''; $arrTemp = explode("-",$vars["NAME"]); if($arrTemp[0]!=''){ $perfix = trim($arrTemp[0]); } $arReturn[$vars['ID']] = [ "NAME"=>$vars["NAME"], "HREF"=>$vars["DESCRIPTION"], "PERFIX"=>$perfix, "CODE"=>$vars["VALUE"], ]; } } $cache->StartDataCache($cache_time, $cache_id, $cache_path); $cache->EndDataCache(["data"=>$arReturn]); } return $arReturn; } ?> |
3. Модифицируем оформление заказа.
Конечно, было бы идеально запилить на событиях сохранение данных, но я пошел скользким путем. В компоненете оформления заказа добавил данную строчку.
1 2 3 4 5 6 7 8 9 10 | <?php $analiticsData = analitics_Getdata(); if($analiticsData){ AddOrderPropertyExt("REFER",$analiticsData,$arResult["ORDER_ID"]); } ?> |
4. В итоге то что? А вот что
5. Заказчик доволен, я доволен, все довольны.
Добрый день!
ОтветитьУдалитьПодскажите плиз, куда добавляли кусок кода с добавлением свойства в заказ в шаблон компонента или в сам компонент?
Привет. В компонент оформления заказа component.php . Такой подход не очень хорош тем что при обновлении ядра битрикс правки в component.php сотрутся.
УдалитьДобрый день! А как связаться с вами можно? Попробовал предложенное решение, не работает. Нужент такой функционал на сайте.
ОтветитьУдалитьСтатья из рубрики - додумывайте сами. Описано поверхностно и не работает
ОтветитьУдалить