Интересные статьи

После решения задачи, хочется рассказать об этом

Тестовое задание от компании Первый бит

Необходимо в письмо менеджеру добавить 10 последних посещенных покупателем товаров

Описание задачи №1

После оформления заказа менеджеру и покупателю отправляются два письма с описанием заказа, одно менеджеру, другое - покупателю. Необходимо в письмо менеджеру добавить 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,и я дополню список

  • Настройка продукта -> Настройки модулей -> Главный модуль E-Mail администратора сайта (отправитель по умолчанию)
  • Настройка продукта -> Настройки модулей -> Интернет магазин E-Mail отдела продаж
  • Настройка продукта -> Сайты -> Список сайтов E-Mail адрес по умолчанию

PS Данный функционал может сразу не заработать, необходимо проверить состояние работы функции mail

Показывать в качестве рекомендуемых три товара из того же раздела

Описание задачи №2

В товарных карточках выводить рекомендуемые товары не так, как по дефолту, а по следующему алгоритму: показывать в качестве рекомендуемых три товара из того же раздела с ценами, как можно более близкими к цене текущего товара

Решение

На эту задачу времени не хватило. Может уделю ей внимание позже. Но если ТЫ решишь эту задачу, напиши плиз мне на почту apashkof@yandex.ru решение и я размещю его здесь.

Вывести 5 последних твитов

Описание задачи №3

В блоке "Мы в соцсетях" вместо виджета от 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 Т.к. блок "Мы в соцсетях" находится на внутренних страницах тоже, то необходимо будет подключить вывод твиттов и там