В версии 2.8.5.3, в настройках модуля "Интернет-магазин" появился чекбокс "Выводить самовывоз на странице адреса". Он позволяет указать вариант доставки "Самовывоз", избегая лишнего заполнения адреса доставки.
По умолчанию, шаблоны для работы данного функционала доступны в шаблоне "Современный (demodizzy)". Для работы функционала в пользовательском шаблоне, необходимо отредактировать шаблон страницы добавления адреса доставки.
Механизм работы фунционала таков:
При неактивности чекбокса "Выводить самовывоз на странице адреса", xml-ответ по протоколу udata "udata://emarket/purchase/delivery/address" имеет следующий вид:
<udata module="emarket" method="purchase" generation-time="0.064584">
<purchasing stage="delivery" step="address" type-id="5" type_id="5" xlink:href="udata://data/getCreateForm/5">
<items>
<item id="312" name="Address for customer #14" active="active"/>
</items>
</purchasing>
</udata>
Если же указанный параметр был активирован - xml-ответ изменится следующим образом:
<udata module="emarket" method="purchase" generation-time="0.083206">
<purchasing stage="delivery" step="address" type-id="5" type_id="5" xlink:href="udata://data/getCreateForm/5">
<items>
<item id="312" name="Address for customer #14" active="active"/>
</items>
<delivery>
<items>
<item id="446" name="Самовывоз" price="0" xlink:href="uobject://446"/>
</items>
</delivery>
</purchasing>
</udata>
Основываясь на этой информации, следует отредактировать шаблоны. В вышеупомянутом шаблоне "Современный", это сделано следующим образом:
<xsl:template match="items[count(item) > 0]" mode="delivery-address">
<h4>
<xsl:text>&choose-delivery-address;:</xsl:text>
</h4>
<xsl:apply-templates select="item" mode="delivery-address" />
<xsl:if test="count(//delivery/items) > 0">
<h4>
<xsl:text>&choose-self-delivery;:</xsl:text>
</h4>
<xsl:apply-templates select="//delivery/items" mode="delivery-self" />
<h4>
<xsl:text>&or-new-delivery-address;:</xsl:text>
</h4>
</xsl:if>
<div>
<label>
<input type="radio" name="delivery-address" value="new" />
<xsl:text>&new-delivery-address;</xsl:text>
</label>
</div>
<div id="new-address">
<xsl:apply-templates select="document(../@xlink:href)//field" mode="form" />
</div>
</xsl:template>
<xsl:template match="item" mode="delivery-self">
<xsl:variable name="delivery-price" select="@price"/>
<div>
<label>
<input type="radio" name="delivery-address" value="delivery_{@id}">
<xsl:if test="@active = 'active'">
<xsl:attribute name="checked" select="'checked'" />
</xsl:if>
</input>
<xsl:value-of select="@name" />
<xsl:call-template name="delivery-price" >
<xsl:with-param name="price" select="$delivery-price"/>
</xsl:call-template >
</label>
</div>
</xsl:template>
Как мы видим, необходимо дополнить шаблон, обработав ситуацию, когда в xml-ответе приходит узел [delivery] и вывести дочерние элементы этого узла (в нашем случае - это будет способ доставки "Самовывоз").