Просто этот вопрос относится к разряду тех, что если человек до этого уровня доходит, то ему не нужно особое описание как и что делать, он уже готов справится сам. Это как таблица умножения - пара примеров есть, а остальное уже надо вычитать самим, а не искать готовый ответ для 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 убрать ненужный способ.