UMIhelp

Разработка сайта на UMI.CMS => Настройка системы и модулей => Тема начата: nibler от 17 Марта 2013, 13:10:01

Название: Настройка доставки
Отправлено: nibler от 17 Марта 2013, 13:10:01
Подскажите пожалуйста, как можно сделать чтобы способ доставки менялся в зависимости от города?

Конкретно надо оставить доставку курьером только для Москвы, для остальных городов только доставка почтой!
Спасибо!
Название: Re:Настройка доставки
Отправлено: admin от 18 Марта 2013, 01:40:59
либо в шаблоне поставить проверку в шаблон, который выводит способы доставки, проверяя какой город был выбран на шаге указания адреса доставки, либо вносить доп поле в тип данных для способов оплаты , в котором указывать что данный способ оплаты доступен только для Москвы, а в шаблоне уже проверять это поле и... опять же информацию введенную на странице ввода адреса доставки
Название: Re:Настройка доставки
Отправлено: nibler от 19 Марта 2013, 00:12:08
Спасибо, можно подробнее?
Как реализовать проверку города, и в случае, если этот город Москва, добавить способ доставки?
Можете привести пример для xslt шаблона?

P.S. Вопрос довольно актуальный, но нигде не могу найти развернутого ответа.
Название: Re:Настройка доставки
Отправлено: Rodogor от 19 Марта 2013, 09:17:07
Просто этот вопрос относится к разряду тех, что если человек до этого уровня доходит, то ему не нужно особое описание как и что делать, он уже готов справится сам. Это как таблица умножения - пара примеров есть, а остальное уже надо вычитать самим, а не искать готовый ответ для 585855857х577237445.

Чисто на XSLT это решить можно, но на мой взгляд это будет некоторое кроилово. XSLT какбэ шаблонизатор, только и всего, призван обрабатывать уже подготовленные данные.

Попробую описать это для XSLT
Когда мы прошли этап выбора адреса, то у нас за пользователем закрепляются наименования товаров, их текущая цена, выбранный тип доставки и т.п.... Закрепляется не за пользователем, а за покупателем. customer
Надо как-то получить эту инфу. Я сейчас отдыхаю от магазинов и максимально кратчайший путь подсказать не смогу, но точно знаю, что один из вариантов - emarket::cart.
После прохождения шага выбора доставки в emarket::cart у нас появляется
Цитировать
<delivery>
<method id="440" name="Самовывоз" xlink:href="uobject://440"/>
<address id="312" name="Address for customer #14" xlink:href="uobject://312">
<index>198262</index>
<region>Ленинградская область</region>
<city>Санкт-Петербург</city>
<street>ул. Большая Пушкарская</street>
<house>2</house>
<flat>44</flat>
</address>
<price name="Российский рубль" code="RUR" rate="1" nominal="1" suffix="руб"/>
</delivery>
Т.е. выполните www.mysite.ru/udata/emarket/cart и увидите там эту инфу.

Значит теперь мы видим, что можем отсечь где у нас нужный город, а где все остальные, ну и в зависимости от этого уже вывести способы доставки.

Далее, нам нужно найти XSLT шаблон, описывающий этап выбора доставки. Находится он может /xsltTpls/modules/emarket/purchase/ или в Templates/mysite/..... Это конечно если всё стандартно.

Этап выбора типа доставки в адресной строке пишется как http://mysite.ru/emarket/purchase/delivery/choose/ Впринципе можно сделать выводы, что за xslt шаблон искать.
Находим - у меня он подписан, но возможно это я подписывал когда-то.

Цитировать
<!-- Выбор способа доставки -->
   <xsl:template match="purchasing[@stage = 'delivery'][@step = 'choose']">
........

Смотрим как там и чо устроено. Ну там банально выводится список способов доставки. Нам нужно его слегка разнообразить любым известным способом.
К примеру, у меня список выводится вот так:

<xsl:apply-templates select="items" mode="delivery-choose" />

1. получаем результат emarket::cart и сохраняем в переменную
<xsl:variable name="city' select="document('udata://emarket/cart')/udata/delivery/address/city"

2. Проверяем, чо там у нас за город и если нужный, то выводим только нужный способ доставки.

<xsl:choose>
<xsl:when test="$city='москва'">
 ...выводим только нужный тип доставки....
</xsl:when>
<xsl:otherwise>

</xsl:otherwise>
 .... выводим только нужные типы доставки.....
</xsl:choose>

3. Вывод нужного и не нужного типа доставки.
Можно тупо вставить html код - это быстрое решение.
Можно запилить опять же на xslt, но помоему в стандартном функционале тяжело получить список вариантов доставки для наглядного анализа, через udata, а учитывая что до этого уже не получилось дойти - это будет не просто. Там вообщем стандартное дерево items/item, как и всюду.

Выводим к примеру нужным нам тип доставки:
<xsl:apply-templates select="items/item[@id='666']" mode="delivery-choose" />
Т.е.  вывели нужный нам тип доставки с конкретным id-шником. id можно посмотреть в коде, можно в админке в типах данных.
Так же возьмём все кроме конкретно - вот тут я реально не знаю корректно это или нет -
<xsl:apply-templates select="items/item[not(@id='666')]" mode="delivery-choose" />
Но ничто не мешает сделать это через mode="delivery-choose-custom" и там через if убрать ненужный способ.
Название: Re:Настройка доставки
Отправлено: Rodogor от 20 Марта 2013, 07:12:03
Из-за сложности условий и особенностей шаблонов было сделано на jquery
Название: Re:Настройка доставки
Отправлено: john от 23 Мая 2013, 23:16:54
Подскажите как убрать лишний шаг, выбор способа доставки?
в файле delivery.xsl просто удалил код
<!-- Выбор способа доставки -->....
При оформлении выводит ошибку
"Purchase is in progress: delivery::choose()"
Название: Re:Настройка доставки
Отправлено: admin от 31 Мая 2013, 13:32:32
Подскажите как убрать лишний шаг, выбор способа доставки?
в файле delivery.xsl просто удалил код
<!-- Выбор способа доставки -->....
При оформлении выводит ошибку
"Purchase is in progress: delivery::choose()"


удалили шаблоны после фразы <!-- Выбор способа доставки -->?
тогда в чем вопрос? шаблоны не найдены выводиться более общий шаблон , в данном случае это "Purchase is in progress: delivery::choose()"