UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: KTI от 11 Октября 2012, 09:13:47

Название: Несколько картинок для одного товара, вопрос по шаблону
Отправлено: KTI от 11 Октября 2012, 09:13:47
Может уже было, не нашел..
В вики есть статейка по импорту нескольких изображений для одного товара, там только описано как загрузить данные в umi, а примера шаблона нет.
Данные я загрузил, вопрос в так, как их теперь обработать? т.е. у меня в товаре получилось следующее:

<property id="448" name="photo2" type="img_file">
<title>Картинка2</title>
<value path="./images/cms/data/import_files/15/15545916-b8a9-4054-b943-d76dc2c6e14b_2.jpg" folder="/images/cms/data/import_files/15" name="15545916-b8a9-4054-b943-d76dc2c6e14b_2" ext="jpg" width="800" height="382">
/images/cms/data/import_files/15/15545916-b8a9-4054-b943-d76dc2c6e14b_2.jpg
</value>
</property>
<property id="449" name="photo3" type="img_file">
<title>Картинка3</title>
<value path="./images/cms/data/import_files/15/15545916-b8a9-4054-b943-d76dc2c6e14b_3.jpg" folder="/images/cms/data/import_files/15" name="15545916-b8a9-4054-b943-d76dc2c6e14b_3" ext="jpg" width="602" height="600">
/images/cms/data/import_files/15/15545916-b8a9-4054-b943-d76dc2c6e14b_3.jpg
</value>
</property>
как правильно написать шаблон вывода этих изображений, дело в том что их бывает 3, бывает 7
Название: Re:Несколько картинок для одного товара, вопрос по шаблону
Отправлено: Rodogor от 11 Октября 2012, 09:38:53
Ваши картинки импортируются в группу полей, к примеру
<group id="286" name="fotos">
 <title>Фото</title>
<property id="448" name="photo2" type="img_file">
<title>Картинка2</title>
<value path="./images/cms/data/import_files/15/15545916-b8a9-4054-b943-d76dc2c6e14b_2.jpg" folder="/images/cms/data/import_files/15" name="15545916-b8a9-4054-b943-d76dc2c6e14b_2" ext="jpg" width="800" height="382">
/images/cms/data/import_files/15/15545916-b8a9-4054-b943-d76dc2c6e14b_2.jpg
</value>
</property>
<property id="449" name="photo3" type="img_file">
<title>Картинка3</title>
<value path="./images/cms/data/import_files/15/15545916-b8a9-4054-b943-d76dc2c6e14b_3.jpg" folder="/images/cms/data/import_files/15" name="15545916-b8a9-4054-b943-d76dc2c6e14b_3" ext="jpg" width="602" height="600">
/images/cms/data/import_files/15/15545916-b8a9-4054-b943-d76dc2c6e14b_3.jpg
</value>
</property>
</group>
Вам нужно обработать GROUP. внутри которого хранятся PROPERTY.

К примеру, если вы находитесь внутри объекта, вставляем фото. Предположим, фото будут в маркированном списке ul:

<ul>
<xsl:apply-templates select=".//group[@name='fotos']" mode="foto_list"/>
</ul>

Далее описываем шаблон для фото:

<xsl:template match="property" mode="foto_list">
<li>
       <img src="{./value}" alt="./title"/>
</li>
</xsl:template>

Не проверял, писал на лету, но должно быть как-то так..
Название: Re:Несколько картинок для одного товара, вопрос по шаблону
Отправлено: KTI от 11 Октября 2012, 10:11:09
по умолчанию эти новые поля добавляются в группу:
<group id="1587" name="product">
 <title>1C: Общие свойства</title>
ну допустим я вызову шаблон
<xsl:apply-templates select=".//group[@name='product']" mode="foto_list"/>
какой шаблон написать для обработки property в этой группе?
сами property выглядят так:
<property id="448" name="photo2" type="img_file">
<property id="449" name="photo3" type="img_file">
<property id="450" name="photo4" type="img_file">

и их количество может быть различно

Название: Re:Несколько картинок для одного товара, вопрос по шаблону
Отправлено: KTI от 11 Октября 2012, 10:13:00
может надо как-то так
<xsl:template match="property[@name='^photo']" mode="foto_list">
<li>
       <img src="{./value}" alt="./title"/>
</li>
</xsl:template>
Название: Re:Несколько картинок для одного товара, вопрос по шаблону
Отправлено: Rodogor от 11 Октября 2012, 11:35:25
В квадратных скобках уточняется/конкретизируется выборка.  Что бы вывести все, достаточно вот так

<xsl:template match="property" mode="foto_list">
<li>
       <img src="{./value}" alt="./title"/>
</li>
</xsl:template>
Название: Re:Несколько картинок для одного товара, вопрос по шаблону
Отправлено: KTI от 11 Октября 2012, 11:56:41
там много property, не только фото, мне нужно отобрать только те у которых @name начинается на "photo", т.е. photo2, photo3 и т.д.
Название: Re:Несколько картинок для одного товара, вопрос по шаблону
Отправлено: Rodogor от 11 Октября 2012, 12:01:12
А, я понял.  Не могу сказать насчёт ^photo, надо смотреть мануалы как можно ли так сделать, но точно можно отобрать по типу данных type img_file
<xsl:template match="property[@type='img_file']" mode="foto_list">
<li>
       <img src="{./value}" alt="./title"/>
</li>
</xsl:template>

По ^photo обязательно заморочусь на досуге, самому надо узнать можно так или нет..
Название: Re:Несколько картинок для одного товара, вопрос по шаблону
Отправлено: KTI от 11 Октября 2012, 12:13:00
я временно так и сделал, через @type='img_file'
 ^photo не работает (уже проверил), надо наверно substr использовать

проверил, работает такая конструкция:
	<xsl:template match="property[substring(@name,1,5)='photo']" mode="foto_list">
немного не кошерно, ^photo было-бы красивее
Название: Re: Несколько картинок для одного товара, вопрос по шаблону
Отправлено: john от 23 Апреля 2015, 21:34:43
Всем добрый вечер, помогите разобраться. в похожей схеме.
Создал в типе данных, к которому относится товар, 3 поля типа изображение
В шаблоне xsl пишу
   
<xsl:template match="udata" mode="object-view">
                      <xsl:apply-templates select=".//group[@name='photos']" mode="obj-photos" />
далее
   
    <xsl:template match="group" mode="obj-photos" />
    <xsl:template match="group[count(property[@type='img_file']) &gt; 0]" mode="object-photos">
        <ul>
            <xsl:apply-templates select="property[@type='img_file']" mode="obj-photom-item" />
        </ul>
    </xsl:template> 

    <xsl:template match="property[position() &gt; 0]" mode="obj-photom-item">     
        <li>
            <img>
                <xsl:attribute name="src">
                    <xsl:call-template name="thumb">
                        <xsl:with-param name="src" select="value/node()" />
                        <xsl:with-param name="height">48</xsl:with-param>
                        <xsl:with-param name="width">auto</xsl:with-param>
                    </xsl:call-template>
                </xsl:attribute>
            </img>
        </li>
    </xsl:template>   

Создал товар с этим типом данных и заполнил 2 поля в карточке товара из 3.
У меня выводится 2 картинки и пустая третье поле без картинки, не могу её убрать.
А если ни одно из полей не заполнено, то все равно выводятся пустые картинки.
Подскажите как решить? Спасибо

Название: Re: Несколько картинок для одного товара, вопрос по шаблону
Отправлено: admin от 23 Апреля 2015, 22:31:34
я временно так и сделал, через @type='img_file'
 ^photo не работает (уже проверил), надо наверно substr использовать

проверил, работает такая конструкция:
	<xsl:template match="property[substring(@name,1,5)='photo']" mode="foto_list">
немного не кошерно, ^photo было-бы красивее

Вы можете использовать xPath функцию contains (смотрите документацию (https://msdn.microsoft.com/ru-ru/library/ms256195.aspx)).
Получится вот такой код (чуть более кошерный)
<xsl:template match="property[contains(@name, 'photo')]" mode="foto_list">
Название: Re: Несколько картинок для одного товара, вопрос по шаблону
Отправлено: admin от 23 Апреля 2015, 22:34:10
Создал товар с этим типом данных и заполнил 2 поля в карточке товара из 3.
У меня выводится 2 картинки и пустая третье поле без картинки, не могу её убрать.
А если ни одно из полей не заполнено, то все равно выводятся пустые картинки.
Подскажите как решить? Спасибо

Вам нужно добавить проверку на то, что значение существует (и не понял зачем вам проверка на position() &gt; 0)
    <xsl:template match="group" mode="obj-photos" />
    <xsl:template match="group[count(property[@type='img_file']) &gt; 0]" mode="object-photos">
        <ul>
            <xsl:apply-templates select="property[@type='img_file']" mode="obj-photom-item" />
        </ul>
    </xsl:template> 

    <xsl:template match="property" mode="obj-photom-item" />   
    <xsl:template match="property[not(value = '')]" mode="obj-photom-item">     
        <li>
            <img>
                <xsl:attribute name="src">
                    <xsl:call-template name="thumb">
                        <xsl:with-param name="src" select="value/node()" />
                        <xsl:with-param name="height">48</xsl:with-param>
                        <xsl:with-param name="width">auto</xsl:with-param>
                    </xsl:call-template>
                </xsl:attribute>
            </img>
        </li>
    </xsl:template>
Название: Re: Несколько картинок для одного товара, вопрос по шаблону
Отправлено: john от 23 Апреля 2015, 23:15:04
Пытался какое-нибудь условие подобрать, последнее что осталось (position() &gt; 0)
Спасибо, заработало.