Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Вывести сумму заказа на странице "Заказ поступил в обработку"

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 2
Просмотров: 3742
Последний ответ 07 Ноября 2014, 23:46:49
от Axiomateria
Перенаправление на страницу регистрации покупателя перед оформлением заказа

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 16
Просмотров: 10003
Последний ответ 11 Марта 2013, 11:54:29
от Axiomateria
Проблемы уведомления клиента при смене статуса заказа и доставки

Автор stud_maiРаздел Шаблоны XSLT

Ответов: 7
Просмотров: 4244
Последний ответ 05 Января 2016, 00:59:01
от admin
Не суммировать скидку на товар с общей скидкой от суммы заказа

Автор smartwebРаздел Шаблоны TPL

Ответов: 3
Просмотров: 2624
Последний ответ 19 Декабря 2016, 12:29:09
от aghigay
статус заказа - с отображением цветом в списке заказов

Автор kroxaРаздел Шаблоны XSLT

Ответов: 0
Просмотров: 2375
Последний ответ 10 Ноября 2011, 16:01:14
от kroxa

0 Пользователей и 1 Гость просматривают эту тему.

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля
Re:Оформление заказа за один шаг.
« Ответ #15 : 14 Июня 2012, 15:24:31 »
засада...
при выборе пункта Самовывоз, форма для вывода адреса доставки конечно скрывается... но при нажатии "Оформить заказ" появляются ошибки заполнение полей адреса. а по логике это не должно проверяться... что делать?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Оформление заказа за один шаг.
« Ответ #16 : 14 Июня 2012, 16:11:49 »
либо в коде добавьте проверку что если выбран самовывоз то пропустить шаг с сохранением оплаты, либо при помощи js проставляйте способ оплаты при получении

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля
Re:Оформление заказа за один шаг.
« Ответ #17 : 14 Июня 2012, 16:28:58 »
проверку какими средствами?
оплата у меня одна единственная и проставлена по умолчанию.
как мне отключить проверку заполнения полей адреса доставки, если требуется Самовывоз. простое скрытие формы для адреса не вариант.
Где отключается проверка на заполнение?

*

Vladimir

  • ****
  • 279
  • +48/-0
    • Просмотр профиля
Re:Оформление заказа за один шаг.
« Ответ #18 : 14 Июня 2012, 16:53:56 »
Можно в шаблонах данных снять обязательность полей в адресе доставки.

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля
Re:Оформление заказа за один шаг.
« Ответ #19 : 14 Июня 2012, 17:09:28 »
Можно в шаблонах данных снять обязательность полей в адресе доставки.
Это крайний вариант, т.к. все же для доставки все же важно что бы был адрес указан, в том числе и для вывода квитанции для оплаты через банк (данный пункт будет с способах оплаты).
Как все таки не выводить адрес доставки, при выборе способа Самовывоз.

мозг ушел на отдых:(

*

Vladimir

  • ****
  • 279
  • +48/-0
    • Просмотр профиля
Re:Оформление заказа за один шаг.
« Ответ #20 : 14 Июня 2012, 18:32:28 »
Проверять наличие адреса вы будете яавскриптом, который напишите сами под свои нужды. А проверка средствами ЮМИ ставит вас в зависимость от имеющейся логики. Поэтому, давайте посмотрим так: а вообще у вас что-то купить при отключенном яваскрипте можно? Если нет, то нет смысла беспокоиться об адресе доставки.
В ином случае у вас правильный сайт и, конечно, тогда нельзя портить его такми костылем, лучше кастом написать.

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля
Re:Оформление заказа за один шаг.
« Ответ #21 : 15 Июня 2012, 10:33:06 »
Vladimir
При отключенном JavaScripte скрытые способы доставки, и адрес доставки не отображаются, но заказ при этом оформляется.

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля
Re:Оформление заказа за один шаг.
« Ответ #22 : 18 Июня 2012, 13:16:14 »
В ином случае у вас правильный сайт и, конечно, тогда нельзя портить его такми костылем, лучше кастом написать.

какая логика должна быть у этого кастома? с чего вообще начинать?

*

Vladimir

  • ****
  • 279
  • +48/-0
    • Просмотр профиля
Re:Оформление заказа за один шаг.
« Ответ #23 : 18 Июня 2012, 18:05:47 »
Не знаю. Подумаем вместе.

В ашем макросе из Вики есть строка
$dataModule->saveEditedObject($addressId, true, true);
В методе saveEditedObject зашита проверка на обязательность полей checkRequiredData в __client_reflection.php
Т.о., избавиться от нее можно заменив системный метод сохрания объекта адреса доставки на свой собственный. Для начала, попробовать перетащить saveEditedObject к себе в __custom целиком так, чтобы проверять обязательность только если не выбран самовывоз.

С другой стороны, у объекта заказа поле доставки обязательным буть не должно. Даже если юмисофты его таким сделали, по логике не должно. Значит, можно попробовать, если выбран самовывоз, просто вообще не создавать объекта адреса. В макросе из Вики весь блок кода
 //сохранение адреса доставки
поместить в условный оператор "если не самовывоз, то..."

По идее, второй вариант должен сработать.
как узнать, что выбран самовывоз?  Есть $deliveryId. Не мудрствуя лукаво просто впишите проверку на id, который посмотрите в админке.

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля
Re:Оформление заказа за один шаг.
« Ответ #24 : 19 Июня 2012, 14:14:14 »
<delivery_choose>
<items>
<item id="18979" name="Самовывоз" price="0" xlink:href="uobject://18979"/>
правильным ли будет написать:
//сохранение адреса доставки
  if($deliveryId != '18979') {

*

Vladimir

  • ****
  • 279
  • +48/-0
    • Просмотр профиля
Re:Оформление заказа за один шаг.
« Ответ #25 : 19 Июня 2012, 17:03:12 »
Думаю, да, вполне похоже на id

*

shoto

  • ***
  • 235
  • +4/-0
    • Просмотр профиля
Re:Оформление заказа за один шаг.
« Ответ #26 : 20 Июня 2012, 10:48:21 »
Что то не получается.
ведь этот кусок начинает "работать" если уже объект Адрес создан (силами JS спрятан). а вот как что бы не создавался сразу, а создавался только после выбора всего что не= "Самовывоз"...

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Оформление заказа за один шаг.
« Ответ #27 : 20 Июня 2012, 11:55:50 »
shoto у вас используется код взятый с wiki.umisoft оформление заказа в один шаг на xslt? Если да, то вопрос создания рабочего механизма покупки при выключенном js выглядит следующим образом...

1. изначально все поля необходимые для оформления заказа выводятся на странице (в том числе форма добавления адреса). С этим вроде все ок у вас
2. если посмотреть в код функции public function saveinfo() то там можно найти такие строчки
//сохранение адреса доставки
  $addressId = getRequest('delivery-address');
  if($addressId == 'new') {
    $collection = umiObjectsCollection::getInstance();
    $types      = umiObjectTypesCollection::getInstance();
    $typeId     = $types->getBaseType("emarket", "delivery_address");
    $customer   = customer::get();
    $addressId  = $collection->addObject("Address for customer #".$customer->id, $typeId);
    $dataModule = $cmsController->getModule("data");
    if($dataModule) {
      $dataModule->saveEditedObject($addressId, true, true);
    }
    $customer->delivery_addresses = array_merge( $customer->delivery_addresses, array($addressId) );
  }
  $order->delivery_address = $addressId;


они отвечают за сохранение адреса доставки, загоняем их в if, который проверяет является ли выбранный способ доставки самовывозом (по его id). В итоге, вышеуказанный код станет таким. id пункта самовывоз приведен для примера, в вашем случае его надо посмотреть в админке при редактировании способа доставки (помер в адресной строке браузера). Пусть в нашем примере, id способа доставки Самовывоз будет равен 27255.
if($deliveryId == 27255){
 //сохранение адреса доставки
  $addressId = getRequest('delivery-address');
  if($addressId == 'new') {
    $collection = umiObjectsCollection::getInstance();
    $types      = umiObjectTypesCollection::getInstance();
    $typeId     = $types->getBaseType("emarket", "delivery_address");
    $customer   = customer::get();
    $addressId  = $collection->addObject("Address for customer #".$customer->id, $typeId);
    $dataModule = $cmsController->getModule("data");
    if($dataModule) {
      $dataModule->saveEditedObject($addressId, true, true);
    }
    $customer->delivery_addresses = array_merge( $customer->delivery_addresses, array($addressId) );
  }
  $order->delivery_address = $addressId;

}

3. после того, как мы на уровне php обезопасили систему от сохранения лишней информации, займемся визуальной частью. А именно, скроем блок для выбора\ввода адреса доставки. Так как, по совету Владимира, мы заботимся о пользователях с отключенным js (чего я в большинстве случаев не делаю, но это оговаривается с каждым клиентом в частном порядке), то мы скроем форму добавления\выбора адреса теми же средствами js. Чтобы, если js отключен, то ничего и не прячется. И пользователь видит форму добавления\выбора адреса и может, чисто с технической стороны, осуществить заказ.

Для этого мы после вывода блока с выбором\добавлением адреса (пусть весь этот блок лежит внутри <div class="delivery_block">...</div>) напишем js код вида
<script type="text/javascript" language="JavaScript">
var sposob_dostavki_id = jQuery('input[name="delivery-id"]:checked').val();
if(sposob_dostavki_id == 27255 ) jQuery('.delivery_block').hide();

</script>

а как повесить обработку при нажатии на radio input я уже писал в этом сообщении
« Последнее редактирование: 20 Июня 2012, 12:00:03 от admin »

*

Vladimir

  • ****
  • 279
  • +48/-0
    • Просмотр профиля
Re:Оформление заказа за один шаг.
« Ответ #28 : 20 Июня 2012, 12:25:07 »
Цитировать
Так как, по совету Владимира, мы заботимся о пользователях с отключенным js
Ничего подобного я не советовал! Я как раз клонил к тому, что если без яваскрипта поле адреса заполнить невозможно, то и нет никакого смысла вообще заморачивать себе голову обязательностью адреса - отключить обязательность в шаблонах данных и все дела.
Тем более, в реальности таких магазинов, где корзина на яваскрипте только и держится, уже стало много. Это просто я сам себе яваскрипт всегда отключаю, потому и бросается в глаза)

Но admin предложил очень  правильное решение.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Оформление заказа за один шаг.
« Ответ #29 : 20 Июня 2012, 12:43:39 »
Владимир, вы правы) я перечитал ваше сообщение.

Стоит сказать что с последних версия umi вопрос со скрытием адреса доставки при самомвывозе решен на уровне default решения смотри в данной статье http://blog.umi-cms.ru/dobryakov/release_2851/