Вывод способов доставки в зависимости от домена
Актуально для версии 2.9
Иногда может возникнуть ситуация, когда в мультисайтовой системе требуется выводить разный список способов доставки при оформлении заказа в зависимости от домена. При использовании XSLT шаблонизатора, задача решается довольно просто. Для начала стоит произвести некоторые приготовления. Идём в модуль "Шаблоны данных" находим тип "Способ доставки" и добавляем ему поле типа "Выпадающий список" с идентификатором domain. В качестве справочника для этого списка нужно выбрать созданный заранее справочник в котором перечислены домены. Теперь для облегчения задачи можно написать простой кастом с примерно следующим кодом:
public function domain() {
return $_SERVER["HTTP_HOST"];
}
Этот макрос будет просто возвращать текущий домен. Идём модуль "Интернет магазин"и на вкладке "Доставка" редактируем созданное поле "domain" в соответствии с потребностями. После проделанных подготовительных операций, можно приступить непосредственно к XSLT шаблону. Открываем шаблон в котором выводится список способов доставки и обрамляем вывод способа доставки в условие (в demodizzy данный код находится в файле /xsltTpls/modules/emarket/purchase/delivery.xsl).
<xsl:if test="document('udata://custom/domain')=document(concat('uobject://',@id,'.domen'))/udata/property/value/item/@name " >
<div>
<label>
<input type="radio" name="delivery-id" value="{@id}">
<xsl:apply-templates select="." mode="delivery-choose-first" />
</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:if>
Теперь при оформлении доставки, на этапе выбора способа доставки будут показаны те способы, поле "domain" которых соответствует текущему домену.