Итак, сегодня задача была несколько странновата.
Заказчик, имея полноценную версию интернет-магазина, желает получать заказы через подобие "формы обратной связи".
Для удобства я сразу решила определять все заказы в инфоблок "Заказы", чтобы они хранились еще хоть где-то, кроме почты.
Поэтому использую компонент iblock.element.add.form.
Заказы успешно добавляются, но теперь нужно, чтобы еще и почта приходила.
Штатного события "Добавлен элемент в инфоблок" в системе нет. Поэтому пишем свой обработчик в init.php.
Если используется событие OnAfterIBlockElementAdd, то ID инфоблока в который добавлен элемент - это $arFields["IBLOCK_ID"].
Достаточно понятно этот механизм описан у Дениса Шаромова
в статье о создании своего почтового события и шаблона.
Кроме прочих данных, нам в письме понадобится ID товара, на котором нажали кнопку "Купить". Для этого кнопка "Купить" имеет идентификатор, например, id=171, который совпадает с ID элемента инфоблока товара.
Передается он в форму таким образом.
Во-первых, в шаблоне компонента iblock.element.add.form внутри тега input (тот, который text) стоит вот такое условие:
<?if($propertyID=="NAME"):?> id="PRID" type="hidden" <?else:?> type="text" <?endif?>
То есть если мы наткнулись на поле с идентификатором NAME (название инфоблока, которое, кстати, является обязательным), мы присваиваем инпуту id=PRID (Продукт Айди) и делаем его скрытым. Иначе - это просто поле text.
Далее при нажатии кнопки "Купить" выполняется
onclick="javascript:set_product_id.call(this);"
(пояснение: да, скорее всего, было бы разумнее прописать в качестве события jQuery где-нибудь в теле страницы - для кнопок, имеющих класс buy)
Вызов с помощью call используется, потому что иначе параметр this внутри функции не будет указывать на объект нажатой кнопки.
Функция же set_product_id подключается в хедере шаблона из файла /js/orderform.js следующего содержания:
function set_product_id() {
//alert(this.id);
$("#PRID").val(this.id); //самая главная строчка, передающая ID товара (кнопки)
if ($('#'+this.id).hasClass('price')) //если нажата кнопка "Цена"
{
$('#buy').hide();
$('#price').show();
};
if ($('#'+this.id).hasClass('buy')) //если нажата кнопка "Купить"
{
$('#price').hide();
$('#buy').show();
};
};
Помимо самой главной строчки, функция также выбирает, какую форму заказа показывать клиенту во всплывающем окне - для заказа товара или форму "Заказать прайс" при нажатии кнопки "Цена" (да-да, именно так, "клиент всегда прав").
Но вернемся к
нашим баранам нашему письму. Помимо информации о клиенте, нам необходимо в письме дать ссылку и название товара, на котором была щелкнута ссылка "Купить".
Так как на сайте используется ЧПУ, простой подстановкой ID товара в URL здесь обойтись не получится.
Поэтому нам нужно будет получить полную информацию о товаре по его ID. Заодно узнаем его название и пропишем красиво в текст ссылочки.
if ($arFields['NAME']!='')
{
$res = CIBlockElement::GetByID($arFields['NAME']);
if($ar_res = $res->GetNext())
$product="<a href='http://".$_SERVER['HTTP_HOST'].$ar_res['DETAIL_PAGE_URL']."'>".$ar_res['NAME']."</a>";
}
Комментарии
Отправить комментарий