UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: webtrend от 12 Апреля 2016, 18:33:15

Название: Вывод дополнительных полей в корзине
Отправлено: webtrend от 12 Апреля 2016, 18:33:15
Добрый день, необходимо в демодизи в корзину добавить 2 дополнительных поля, к примеру чтобы было после выбора доставки, перед выбором оплаты шаг Дополнительная информация с полями 1 - информация, 2 галочка запаковать в пакет, как осуществить данное деяние? И чтобы в заказ передавались эти данные.
Название: Re: Вывод дополнительных полей в корзине
Отправлено: aghigay от 12 Апреля 2016, 19:29:50
Информация - это типа поле комментария?

Ну вопрос не особо тривиальный. Я бы делал через события, добавлял бы проверку на оформление и ловил бы из представления эти поля. А потом пихал бы куда-нибудь, куда угодно. На ваше усмотрение.

Правда тут возникает вопрос, что в самом заказе не все доп. поля показываются. Возможно, придется кастомизировать админку.
Название: Re: Вывод дополнительных полей в корзине
Отправлено: e.ioffe от 12 Апреля 2016, 22:39:18
Цитировать
Добрый день, необходимо в демодизи в корзину добавить 2 дополнительных поля, к примеру чтобы было после выбора доставки, перед выбором оплаты шаг Дополнительная информация с полями 1 - информация, 2 галочка запаковать в пакет, как осуществить данное деяние? И чтобы в заказ передавались эти данные.

Обычно добавляю поля в тип данных "Заказ" в группу полей "Свойства доставки заказа".

Если используете кастомный метод для оформления заказа - в нем получаете значения полей и устанавливаете их для заказа
$info = getRequest('info');
$package = getRequest('package');
$order->setValue('info', $info);
$order->setValue('package', $package);

Если используете стандартный макрос, нужно смотреть в сторону события order-status-changed http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/standartnye_tochki_vyzova/#sel=5:51,5:51

В этом событии проверяете статус заказа (для новых заказов он должен быть равен waiting). Что-то вроде
if($event->getMode() == "after" &&
$event->getParam("old-status-id") != $event->getParam("new-status-id") && $event->getParam("new-status-id") == order::getStatusByCode('waiting')) {
$order = $eventPoint->getRef('order');
/* Код, который записывает данные в объект заказа*/
}

Для примера можете посмотреть метод onStatusChanged файла classes/modules/emarket/__events.php