Логотип

Документация по макросам и шаблонам UMI.CMS

Вывод пункта "Самовывоз" на странице добавления адреса доставки

В версии 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] и вывести дочерние элементы этого узла (в нашем случае - это будет способ доставки "Самовывоз").