UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: Veinard от 05 Ноября 2014, 20:30:20

Название: Достать адрес доставки из покупателя
Отправлено: Veinard от 05 Ноября 2014, 20:30:20
Помогите немного пожалуйста, что-то запутался немного.
Вот есть объект покупателя, у которого есть данные об адресах доставки

<group id="209" name="delivery">
    <title>Доставка</title>
    <property id="286" name="delivery_addresses" type="relation" multiple="multiple">
        <title>Адреса доставки</title>
        <value>
            <item id="6209" name="Address for customer #6177" type-id="37" type-guid="emarket-deliveryaddress" xlink:href="uobject://6209"/>
            <item id="6213" name="Address for customer #6177" type-id="37" type-guid="emarket-deliveryaddress" xlink:href="uobject://6213"/>
        </value>
    </property>
</group>

Внутри объекта адреса уже есть конструкции вида
<property id="70" name="city" type="string">
    <title>Город</title>
    <value>Москва</value>
</property>

Вот мне надо вытащить данные типа "Москва, ул. Такаято, дом такой-то". Но не придумал как =(.
Название: Re:Достать адрес доставки из покупателя
Отправлено: admin от 07 Ноября 2014, 21:10:22
где именно вы его вытягиваете?

Возможно вам хватит такого кода:

Вначале, надо получить id адреса из данных у покупателя. Предположим, у нас уже есть переменная с данными о пользователе и нам нужен первый из его адресов.
<xsl:variable name="adress_id" select="$user_info//property[@name='delivery_addresses']/value/item[1]/@id" />

Затем, берем объект адреса
<xsl:variable name="adress_info" select="document(concat('uobject://',$adress_id))/udata" />

Затем, перебираем property этого адреса и выводим их в нужном виде.
Например так:
<xsl:apply-templates select="$adress_info//property" mode="adres_info"/>

и шаблон для их вывода:
<xsl:template match="property" mode="adres_info">
    <xsl:value-of select="title"/>:
    <xsl:value-of select="value"/><br/>
</xsl:template>

P.S. некоторые поля в объекте адреса вам не нужны, так что прописывайте в вызове property ограничения. Так же помните что некоторые поля, например страна, это выпадающий список и там значение будет выводиться не
<xsl:value-of select="value"/>
а
<xsl:value-of select="value/item/@name"/>