UMIhelp

Разработка сайта на UMI.CMS => Шаблоны TPL => Тема начата: arbuzzz от 06 Ноября 2012, 10:24:04

Название: Информация в письме при заказе.
Отправлено: arbuzzz от 06 Ноября 2012, 10:24:04
Все перепробовал и что-то нифига у меня не получается.

Как в письмо, приходящее покупателю, добавить информацию о самом покупателе, способе доставки и адресе доставки, если таковой есть?
Название: Re:Информация в письме при заказе.
Отправлено: admin от 07 Ноября 2012, 08:24:04
а что именно не получается? письмо не приходит, приходит, но вы не знаете где редактировать шаблон? не знаете как отредактировать шаблон? или свой вариант?
Название: Re:Информация в письме при заказе.
Отправлено: arbuzzz от 07 Ноября 2012, 22:53:12
Письмо приходит,но в нем нет полной информации о заказе.
ФИО покупателя, адрес доставки и пр. Причем этого нет ни для пользователя, ни для гостя.
Название: Re:Информация в письме при заказе.
Отправлено: admin от 08 Ноября 2012, 05:37:12
а вы что-то пробовали уже делать чтобы вывести эту информацию?

P.S. опишите подробнее вашу ситуацию, что делали?, что ожидали получить?, что получили?, что вызывает вопрос?...

P.P.S. например такое решение Добавление информации о заказе в письмо-уведомление (http://wiki.umisoft.ru/%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B5_%D0%B2_%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%BE-%D1%83%D0%B2%D0%B5%D0%B4%D0%BE%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5), оно для xslt, но где-то есть такое же для tpl. Суть одна и та же, вывод доп информации через макрос emarket order, а id текущего заказа вы знаете %order_id%
Название: Re:Информация в письме при заказе.
Отправлено: arbuzzz от 08 Ноября 2012, 15:55:10
order выводит только товары/цены. Никакой информации о покупателе и доставке он не дает.  Я пробовал через кастом вытащить эти данные используя id заказа, но никак не могу понять как и какие объекты надо задействовать.

Я хочу получить письомо вида:
==========================
Здравствуйте <имя покупателя>
Номер заказа Вашего <номер заказа>
<товары в заказе>
<Способ доставки>
<Адрес, если был>

Спасибо, что выбрали наш магазин Бла бла бла.
=======================================

С товарными позициями и и ценами вопросов нет.
Название: Re:Информация в письме при заказе.
Отправлено: admin от 08 Ноября 2012, 19:12:34
через order_id можно обратиться к полю объекту order, в нем есть поле customer_id через которое можно обратиться к объекту пользователь из которого можно вытянуть имя, фамилию и т.д
Название: Re:Информация в письме при заказе.
Отправлено: admin от 08 Ноября 2012, 19:13:12
все это используя макросы %emarket order()%  и  %data getPropertyOfObject()%
Название: Re:Информация в письме при заказе.
Отправлено: arbuzzz от 08 Ноября 2012, 19:16:44
все это используя макросы %emarket order()%  и  %data getPropertyOfObject()%
Не получается так, пробовал. Сейчас не могу проверить, но по крайней мере для гостя точно не выходит получить контактные данные. Либо я что-то конкретно наптуал.
Название: Re:Информация в письме при заказе.
Отправлено: admin от 10 Ноября 2012, 11:33:35
не забывайте, что у гостя данные сохраняются в другой тип данных "незарегистрированный пользователь" , при оформлении заказа и там название некоторых полей отличается от типа данных "пользователь"
Название: Re:Информация в письме при заказе.
Отправлено: john от 12 Марта 2013, 22:21:14
Помогите разобраться.
Находясь в корзине, нажимаем кнопку "Оформить заказ"
Попадаем на страницу выбора адреса доставки.
На этой странице заполняю форму,  город улица дом комментарий.
Поля mail не было, в разделе шаблон данных добавил его,
идентификатор его "email", что нужно сделать чтобы пользователю приходило уведомление о заказе?

Название: Re:Информация в письме при заказе.
Отправлено: arbuzzz от 12 Марта 2013, 22:46:58
Помогите разобраться.
Находясь в корзине, нажимаем кнопку "Оформить заказ"
Попадаем на страницу выбора адреса доставки.
На этой странице заполняю форму,  город улица дом комментарий.
Поля mail не было, в разделе шаблон данных добавил его,
идентификатор его "email", что нужно сделать чтобы пользователю приходило уведомление о заказе?

Поле email относится не к адресу, а к пользователю. Соответственно и появляется оно не при заполнении адресных данных, а

1) При регистрации
2) При вводе данных покупателя (для гостя во время оформления заказа)

И оповещение отправляется на email. Так что Вы немного перемудрили.
Название: Re:Информация в письме при заказе.
Отправлено: john от 12 Марта 2013, 23:45:24
1) А если регистрация на сайте отсутствует.
2) И у меня заказ оформляется в один этап.
Как-нибудь можно прикрутить уведомление?
Название: Re:Информация в письме при заказе.
Отправлено: admin от 13 Марта 2013, 10:06:29
1) А если регистрация на сайте отсутствует.
2) И у меня заказ оформляется в один этап.
Как-нибудь можно прикрутить уведомление?

1. если регистрации нет значит пользователь оформляет заказ как незарегистрированный пользователь и вводит свои данные на первом шаге оформления заказа (если он уже вводил эти данные то они сохраняются и повторно могут не спрашиваться, там по моему по кукам идет определение, точно не скажу, попробуйте оформить заказ в другом в другом браузере, где вы еще не оформляли)
2. если у вас идет оформление в один шаг, то вы наверняка пользуетесь кастомным скриптом для оформления в один шаг... так что сказать что и где у вас надо поменять это задача сопряжена с тем чтобы вначале разобраться что и как у вас работает сейчас....
Название: Re:Информация в письме при заказе.
Отправлено: john от 13 Марта 2013, 13:39:58
1. Если авторизоваться в админке  site.ru/admin, там у меня есть mail
и уведомление при заказе приходит (Ваш заказ #19 поступил в обработку ).  Попробовал в другом браузере и в другом, шаги одинаковые как у зарегистрированного и незарегистрированного, положили товар в корзину, нажимаем оформить заказ и появляется страница с формой "Новый адрес доставки", заполнив поля нажимаем кнопку "отправить" и на след странице спасибо за заказ.

а) Находясь в корзине используется макрос %emarket cart('default')%
Как я понимаю он использует шаблон /tpls/emarket/default.tpl

б) Далее на странице адреса http://site.ru/emarket/purchase/
используется макрос %emarket purchase_check(3)%
Дальше не понимаю, и макрос получается не родной.
Название: Re:Информация в письме при заказе.
Отправлено: john от 13 Марта 2013, 15:57:32
Нашел этот кастомный макрос тут
classes/modules/emarket/__custom.php
Он гигантский, и мне в нем работать надо, чтобы добавить e-mail?
Может где попроще?
public function purchase_check($step=1) {

$debug = false;

$users_inst = cmsController::getInstance()->getModule("users");

if($users_inst->is_auth()) {  // проверка на авторизацию пользователя..
$user_id = macros_current_user_id();
//emarket::purchase();
//return 'Пользователь';
}

//emarket::purchase();
$order = $this->getBasketOrder();
if($order instanceof order) {
$order_is_empty = true;
$orderItems = $order->getItems();
foreach($orderItems as $orderItem) {
$element = $orderItem->getItemElement();
if($element instanceof umiHierarchyElement) {
$order_is_empty = false;
$c++;
}
}

if($order->isEmpty() or $order_is_empty) {
//$this->errorNewMessage('Корзина пуста<BR>');
//$this->errorPanic();
return '<B COLOR="red">Корзина пуста</B>';
}
//return $this->purchase();

if ($step == 1) {   // вывести доступные способы оплаты
if ($debug) $s.= $step.' шаг ';
$s.= $this->renderPaymentsList2($order, 'default_2');
}
if ($step == 2) { // способ оплаты выбран
//$url = "{$this->pre_lang}/emarket/purchase/";
//$this->redirect($url);
if ($debug) $s.= $step.' шаг ';
$s.= $this->choosePayment2($order).$c.' '.$order->getCustomerId(). ' '. $user_id;
}
if ($step == 3) {  // вывести форму для ввода адреса доставки
$payment_id = $order->getValue('payment_id');  // проанализировать ,какой метод оплаты выбрал клиент?
if($payment_id)
$payment = payment::get($payment_id, $order);

if($payment instanceof payment) {
$paymentName = $payment->getCodeName();
if (in_array($paymentName, array('chronopay', 'payonline')) and (!$users_inst->is_auth())) {
$s = 'Данный вид платежа доступен только зарегистрированным пользователям<BR>'.users::login();
if (getServer('HTTP_REFERER')) {
$this->errorNewMessage($s);
$this->errorPanic();
}
else
$this->redirect('/purchase/payment/');
//$s_ref_url = getServer('HTTP_REFERER');
//$this->redirect($s_ref_url);
//if(isset($_SERVER['HTTP_REFERER'])) $this->redirect($_SERVER['HTTP_REFERER']);
}
else {
if ($debug) $s.= $step.' шаг ';
$s.= $this->renderDeliveryAddressesList2($order, 'default2');
}
}
else {
//$s =  $step.' шаг '.$this->renderDeliveryAddressesList2($order, 'default2');
// Вид платежа не выбран, вернуть к выбору способа оплаты
$this->redirect('/purchase/payment/');
}
}
if ($step == 4) {  // адрес доставки выбран
if ($debug) $s.= $step.' шаг ';
$s.= $this->chooseDeliveryAddress2($order);
}
if ($step == 5) { // вывести форму выбора способа доставки
//$payment_id = $order->getValue('payment_id');  // проанализировать ,какой метод оплаты выбрал клиент?
//if($payment_id)
// $payment = payment::get($payment_id, $order);

//if($payment instanceof payment) {
if ($debug) $s.= $step.' шаг ';
$s.= $this->renderDeliveryList2($order, 'default2');
//}
//else // Вид платежа не выбран, вернуть к выбору способа оплаты
// $this->redirect('/purchase/payment/');

}
if ($step == 6) { // способ доставки выбран
if ($debug) $s.= $step.' шаг ';
$s.= $this->chooseDelivery2($order);
}
}

//return 'Гость'.var_export($order, true);
//return 'Гость'.$s.' '.$paymentName.'<BR>';
return $s;
}
Название: Re:Информация в письме при заказе.
Отправлено: admin от 15 Марта 2013, 07:49:48
что мы видим на первый взгляд....

у вас на шаге  http://site.ru/emarket/purchase/ подключается свой скрипт purchase_check(3)% (откуда вы его взяли?), посмотрев который видно, что параметр 3 заставляет выводить....

if ($step == 3) {  // вывести форму для ввода адреса доставки

но ниже идет код который сохраняет способ оплаты...

В общем, код такого вида вижу в первый раз (сколько доделок уже видел, но такой в первые), откуда он, что он должен делать, откуда у вас появилось виденье что именно %purchase_check(3)% надо вставлять на страницу http://site.ru/emarket/purchase/ ??
Название: Re:Информация в письме при заказе.
Отправлено: john от 15 Марта 2013, 15:31:51
Сам такой код вижу впервые) Чужой код разбираю.
Скрипт purchase_check(3) подключается через страницу контента как и остальные скрипты.
Я тоже вижу что сохраняет способ оплаты, но в реальности он его тупо пропускает.
Может легче вернуть стандартные макросы и регистрацию сделать, чтобы mail фигурировал?

Название: Re:Информация в письме при заказе.
Отправлено: admin от 15 Марта 2013, 16:11:18
можно и к стандарту вернуться... либо разбираться в чужом коде)
Название: Re:Информация в письме при заказе.
Отправлено: john от 24 Мая 2014, 11:28:35
Версия UMI 2.8.1, шаблон TPL.
Письмо приходит к клиенту, но в нем нет полной информации о заказе.
Перечня товара и общей суммы и номера заказа.
ФИО покупателя, адрес доставки и пр.
Как я понял это редактируется /clasess/modules/emarket/_events.php
Что писать в коде и где?
Я нашел такие строчки, если заказ оформлен, статус меняется, то происходит действие.
		public function onStatusChanged(iUmiEventPoint $event) {
if($event->getMode() == "after" &&
$event->getParam("old-status-id") != $event->getParam("new-status-id")) {
$order = $event->getRef("order");
$this->notifyOrderStatusChange($order, "status_id");
Название: Re: Информация в письме при заказе.
Отправлено: Canekt от 24 Августа 2016, 04:23:47
не забывайте, что у гостя данные сохраняются в другой тип данных "незарегистрированный пользователь" , при оформлении заказа и там название некоторых полей отличается от типа данных "пользователь"
Как выявить эти поля и привязать их к письму?