После решения задачи, хочется рассказать об этом
После оформления заказа менеджеру и покупателю отправляются два письма с описанием заказа, одно менеджеру, другое - покупателю. Необходимо в письмо менеджеру добавить 10 последних посещенных покупателем товаров до того, как тот оформил заказ, в обратном хронологическом порядке.
Сначала сделаем необходимые настройки в административной панели битрикс. Для этого переходим в раздел Настройки -> Настройки продукта -> Посчтовые события -> Типы почтовых событий и находим тип SALE_NEW_ORDER с названием "Новый заказ". Добовляем в описание строчку #VISITED_PAGES# - 10 последних посещенных покупателем товаров до того, как тот оформил заказ, в обратном хронологическом порядке. Тег #VISITED_PAGES# будет заменяться в почтовом шаблоне на необходимые нам данные.
Далее, т.к. для данного типа - 1 почтовый шаблон, который отправляет письмо о новом заказе покупателю и скрытым письмом менеджеру, нужно разделить данный функционал на два почтовых шаблона. Один будет отправлять покупателю письмо, второй будет отправлять менеджеру. Переходим в раздел Настройки -> Настройки продукта -> Почтовые события -> Почтовые шаблоны и находим шаблон для отправки письма покупателю с типом SALE_NEW_ORDER и убираем из поля скрытая копия тег #BCC#. Он нам понадобится дальше. Создаем новое почтовое событие копируя предыдущее. И в поле кому указываем тот саймы тег #BCC#. Здесь будет подставлен email менеджера. В данном случае он будет совпадать с #SALE_EMAIL#. Далее в теле сообщения в визуальном редакторе или html коде указываем строчку 10 последних посещенных покупателем товаров: #VISITED_PAGES# Все! на этом действия в админке закончены.
ДАльше необходимо создать обработчик события OnBeforeEventSend, который вызывается перед отправкой сообщения. В результате данного вызова, для нужного типа события, мы сможем добавить в массив $arFields новое поле VISITED_PAGES и передать туда необходимые данные со значениями 10 последних посещенных покупателем товаров. Для этого в файл init.php пишем код ниже по тексту. При помощи CSaleViewedProduct::GetList мы забираем просмотренные товары пользователем с FUSER_ID. Т.к. необходимо 10 последних посещенных покупателем товаров устанавливаем значение "nTopCount" => "10". Т.к. в обратном хронологическом порядке устанавливаем значение "DATE_VISIT" => "DESC"
AddEventHandler('main', 'OnBeforeEventSend', Array("CustomEvent", "OnBeforeEventSend")); class CustomEvent { function OnBeforeEventSend(&$arFields, &$arTemplate) { if($arTemplate["EVENT_NAME"] == "SALE_NEW_ORDER"){ if(CModule::IncludeModule("sale")){ $arFields["VISITED_PAGES"] = ""; $basketUserId = CSaleBasket::GetBasketUserID(true); if ($basketUserId > 0){ $viewedIterator = CSaleViewedProduct::GetList( array( "DATE_VISIT" => "DESC" ), array( "FUSER_ID" => $basketUserId, "SITE_ID" => SITE_ID ), false, array( "nTopCount" => "10" ), array( "ID", "PRODUCT_ID", "NAME", "DETAIL_PAGE_URL", "CURRENCY", "PRICE" ) ); while ($arProperty = $viewedIterator->fetch()){ $arFields["VISITED_PAGES"] .= '<li><a href="'.$arProperty["DETAIL_PAGE_URL"].'">'.$arProperty["NAME"].' - '.$arProperty["PRICE"].' '.$arProperty["CURRENCY"].'</a></li>'; } if(strlen($arFields["VISITED_PAGES"]) > 0){ $arFields["VISITED_PAGES"] = "<ol>".$arFields["VISITED_PAGES"]."</ol>"; } } } } } }
Заметка В админке битрикса существует 3 места, где указывается email администратора, если Ты знаешь еще места, напиши мне на почту apashkof@yandex.ru,и я дополню список
PS Данный функционал может сразу не заработать, необходимо проверить состояние работы функции mail
В товарных карточках выводить рекомендуемые товары не так, как по дефолту, а по следующему алгоритму: показывать в качестве рекомендуемых три товара из того же раздела с ценами, как можно более близкими к цене текущего товара
На эту задачу времени не хватило. Может уделю ей внимание позже. Но если ТЫ решишь эту задачу, напиши плиз мне на почту apashkof@yandex.ru решение и я размещю его здесь.
В блоке "Мы в соцсетях" вместо виджета от Facebook вывести 5 последних твитов от @1cbit
Тут все просто. Необходимо найти в коде, где прячется данный виджет от Facebook и вмесо него вставить кусочек кода, который нам предоставит twitter. Файл с виджетом socnet_sidebar.php подключается в файле sect_sidebar.php, который лежит в корне сайта. Отредактируем и вместо подключения блока "Мы в соц сетях" подключим созданный нами файл twitter_1cbit.php Далее туда запишем код от твиттера
Для этого перейдем на страницу https://publish.twitter.com/ и введем @1cbit. Выберем необходимые опции и скопируем сгенерированный код. Его мы поместим в файл twitter_1cbit.php и дополним атрибутом data-tweet-limit="5", чтобы вывести 5 последних твитов
<div class="bx-incbanners"> <a class="twitter-timeline" data-tweet-limit="5" data-theme="light" href="https://twitter.com/1cbit?ref_src=twsrc%5Etfw"> Tweets by 1cbit </a> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </div>
PS Т.к. блок "Мы в соцсетях" находится на внутренних страницах тоже, то необходимо будет подключить вывод твиттов и там