За основу возьмем инструкцию ВК по настройке динамического ретаргетинга.
Внимание: для подключения динамического ретаргетинга в кабинет рекламодателя нужно написать в техподдержку Вконтакте.
Загрузка каталога товаров в ВК
Для работы товарного ретаргетинга нужно загрузить YML файл с каталогом в кабинет Вконтакте.
Для настройки нам понадобиться ID прайс листа:
Настройка шаблонов UMI.CMS
Перед закрывающемся тегом body добавляем код пикселя из настроек.
ID прайс листа добавим в константу в default.phtml
define('VK_PRICE_LIST_ID', 4677);
Также добавим в константу массив ID товаров, которые будут показываться посетителям, которые не посещали страницы каталога. Например читали статьи. В массив можно добавить по 2-3 популярных товара из разных категорий. При желании можно вынести эти товары в настройки сайта.
$VKProductsIds = array(2214, 160, 28090, 2349, 6781); define('VK_TARGET_IN_OTHER_ID', serialize($VKProductsIds));
После кода пикселя вызываем шаблон:
<?php if(METHOD!='purchase' and METHOD!='cart' and METHOD!='purchasing_one_step') echo($this->render($variables, 'blocks/footer/vk-target')); ?>
Код шаблона /php/blocks/footer/vk-target.phtml
<?php /** @var umiTemplaterPHP|ViewPhpExtension|AjaxExtension|UpmixExtension $this */?> <?php /** @var array $variables */?> <?php $products = false; $timeOut = 3000; //тайм аут нужен в том случае, если пиксель подключается через отложенную загрузку. Можно отрегулировать величину, чтобы не было ошибок в консоли if (METHOD=='object'){ $event = 'view_product'; $bValue = 50; $emarket_price_arr = $this->macros('emarket', 'price', array(PAGE_ID, 'default', 0)); $price = $emarket_price_arr["price-actual"]; $price_old = $emarket_price_arr["price-original"] ?? false; } elseif (PAGE_IS_INDEX){ $event = 'view_home'; $products = unserialize(VK_TARGET_POPULAR_IDS); $bValue = 5; } elseif (METHOD=='category'){ $event = 'view_category'; $products = unserialize(VK_TARGET_IN_CATEGORY_IDS); $bValue = 10; $timeOut = 7000; } elseif (METHOD=='search_do'){ $event = 'view_search'; $products = unserialize(VK_TARGET_IN_SEARCH_IDS); $bValue = 30; } else { $event = 'view_other'; $products = unserialize(VK_TARGET_IN_OTHER_ID); $bValue = 1; } ?> <script> const eventParams = { <?php if(METHOD=='object'):?> "products" : [{"id":"<?=PAGE_ID?>", "group_id":"<?=PAGE_PARENT_ID?>", "price":<?=$price?><?php if(!empty($price_old) and $price_old>$price) echo(', "price_old:"' . $price_old)?>}], <?php elseif (!empty($products)):?> "products" : [ <?php foreach ($products as $id):?> {"id":"<?=$id?>"}, <?php endforeach;?> ], <?php endif;?> "business_value" : <?=$bValue?>, "currency_code" : "RUR" }; setTimeout(function() { VK.Retargeting.ProductEvent(<?=VK_PRICE_LIST_ID?>, "<?=$event?>", eventParams); }, <?=$timeOut?>); </script>
Переменная bValue – это ценность того или иного действия на сайте. Значения можно поменять нужным образом.
Главная страница
В шаблоне главной страницы меняем вывод популярных товаров для того чтобы сохранять ID популярных товаров в константу.
<?php $vkItemsIds = array();?> <?php if(!empty($popularGoods['lines'])):?> <div class="popular-goods clear-after wrapper-row"> <h2>Популярные товары</h2> <div class="relative clear-after owl-carousel owl-index js_object_list" data-list="Популярные на главной" data-category_id="1" data-category_name="Главная"> <?php $popular = $TAGMANGER?> <?php foreach ($popularGoods['lines'] as $key=>$item):?> <?php $object = $this->render(array('item'=>$item , 'key'=>$key+1, 'id'=>PAGE_ID), 'modules/catalog/blocks/object/object-in-related-objects'); $object = str_replace(array("\r\n", "\r", "\n", "\n\r", "\t"), '', $object); $object = str_replace(array(" "), '', $object); $vkItemsIds[] = $item['id']; echo ($object); ?> <?php $popular .= $this->render(array('item'=>$item , 'key'=>($key+1), 'list'=>'Популярные на главной', 'categoryName'=>'Главная'), 'blocks/tag-manager/object-in-list') ?> <?php endforeach;?> </div> <?php $popular .= ']}});</script>';?> <?=$popular?> </div> <?php endif;?> <?php define('VK_TARGET_POPULAR_IDS', serialize($vkItemsIds)); ?>
Нужно добавить 3 строки:
<?php $vkItemsIds = array();?> ............................. <?php $vkItemsIds[] = $item['id'];?> ............................ <?php define('VK_TARGET_POPULAR_IDS', serialize($vkItemsIds));?>
Страница объекта каталога
В шаблон объекта каталога добавляем обработчик добавления в корзину:
<script> var button = document.getElementById('eec_adgood'); if (typeof(button) != 'undefined' && button != null){ button.onclick = function(){ var eventParamsCart = { "products" : [{"id":"<?=PAGE_ID?>", "group_id":"<?=PAGE_PARENT_ID?>", "price" : <?php echo $price?><?php if(!empty($priceOld) and $priceOld>$price) echo(', "price_old:"' . $priceOld)?>}], "business_value" : 100, "currency_code" : "RUR" }; VK.Retargeting.ProductEvent(<?=VK_PRICE_LIST_ID?>, "add_to_cart", eventParamsCart); }; } </script>
Страница каталога
В шаблон вывода объектов в категории добавляем:
<?php $vkItemsIds = array();?> ............................. <?php $vkItemsIds[] = $item['id'];?> ............................ <?php define('VK_TARGET_IN_CATEGORY_IDS', serialize($vkItemsIds));?>
Обработчик добавления в корзину в категории:
$(document).ready(function(){ //добавить в корзину в категории $(".add_basket").on('click', function (e) { var $listDataTag = $(this).closest('#container'); var id = $(this).data('pid'); var $objectDataTag = $(this).closest('.catalog-item-wrapper'); var price = $objectDataTag.data("price"); var categoryId = $listDataTag.data("category_id"); var eventParamsCart = { "products" : [{"id":id, "group_id":categoryId, "price" : price}], "business_value" : 100 }; VK.Retargeting.ProductEvent(4677, "add_to_cart", eventParamsCart); }); });
Оформление заказа
В шаблон /php/modules/emarket/purchasing_one_step.phtml добавляем:
$cart = $this->macros('emarket', 'cart'); $products = ''; foreach ($cart['items'] as $item){ $products = $products . '{"id": "' . $item["element_id"] . '", "price" : ' . $item["price"]["actual"] . '},'; } <script> <?php if (!USER_IS_SV): ?> const eventParams = { "products" : [<?=$products?>], "business_value" : 500, "currency_code" : "RUR", "total_price" : <?= $cart["total-price"]["actual"] ?> }; function onCheckout(step) { if (step === 3){ option = $('input[name=delivery-id]:checked', '#purchase_form').siblings('label').text(); setTimeout(function() { VK.Retargeting.ProductEvent(3332, "add_payment_info", eventParams); }, 2000); } } setTimeout(function() { VK.Retargeting.ProductEvent(4677, "init_checkout", eventParams); }, 4000); <?php endif;?> </script>
Функция onCheckout должна выполняться на шаге подтверждения платежной информации.
Совершение покупки
В шаблоне /php/modules/emarket/purchase/result_successful.phtml
Добавляем в цикл, в котором выводится информация о товарах в заказе:
$products = ''; ................... $products = $products . '{"id": "' . $id . '", "group_id":"' . $itemPage[0]->getParentId() . '", "price" : ' . $itemPage[0]->getValue('price') . '},';
<script> const eventParams = { "products" : [<?=$products?>], "business_value" : 1000, "currency_code" : "RUR", "total_price" : <?= $total_price-$delivery_price; ?> }; setTimeout(function() { VK.Retargeting.ProductEvent(4677, "purchase", eventParams); }, 4000); </script>
Поиск на сайте
В шаблон /php/modules/search/search_do.phtml добавляем
$vkItemsIds = array(); ..................... if ($key<10) $vkItemsIds[] = $item['id']; ..................... <?php define('VK_TARGET_IN_SEARCH_IDS', serialize($vkItemsIds));?>
Добавить комментарий