Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

0 Пользователей и 1 Гость просматривают эту тему.

*

KTI

  • **
  • 72
  • +1/-0
    • Просмотр профиля
Может уже было, не нашел..
В вики есть статейка по импорту нескольких изображений для одного товара, там только описано как загрузить данные в 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

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Ваши картинки импортируются в группу полей, к примеру
<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>

Не проверял, писал на лету, но должно быть как-то так..
« Последнее редактирование: 11 Октября 2012, 09:45:11 от Rodogor »

*

KTI

  • **
  • 72
  • +1/-0
    • Просмотр профиля
по умолчанию эти новые поля добавляются в группу:
<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">

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


*

KTI

  • **
  • 72
  • +1/-0
    • Просмотр профиля
может надо как-то так
<xsl:template match="property[@name='^photo']" mode="foto_list">
<li>
       <img src="{./value}" alt="./title"/>
</li>
</xsl:template>

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
В квадратных скобках уточняется/конкретизируется выборка.  Что бы вывести все, достаточно вот так

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

*

KTI

  • **
  • 72
  • +1/-0
    • Просмотр профиля
там много property, не только фото, мне нужно отобрать только те у которых @name начинается на "photo", т.е. photo2, photo3 и т.д.

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
А, я понял.  Не могу сказать насчёт ^photo, надо смотреть мануалы как можно ли так сделать, но точно можно отобрать по типу данных type img_file
<xsl:template match="property[@type='img_file']" mode="foto_list">
<li>
       <img src="{./value}" alt="./title"/>
</li>
</xsl:template>

По ^photo обязательно заморочусь на досуге, самому надо узнать можно так или нет..

*

KTI

  • **
  • 72
  • +1/-0
    • Просмотр профиля
я временно так и сделал, через @type='img_file'
 ^photo не работает (уже проверил), надо наверно substr использовать

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

*

john

  • ***
  • 207
  • +6/-0
    • Просмотр профиля
Всем добрый вечер, помогите разобраться. в похожей схеме.
Создал в типе данных, к которому относится товар, 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 картинки и пустая третье поле без картинки, не могу её убрать.
А если ни одно из полей не заполнено, то все равно выводятся пустые картинки.
Подскажите как решить? Спасибо


*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
я временно так и сделал, через @type='img_file'
 ^photo не работает (уже проверил), надо наверно substr использовать

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

Вы можете использовать xPath функцию contains (смотрите документацию).
Получится вот такой код (чуть более кошерный)
<xsl:template match="property[contains(@name, 'photo')]" mode="foto_list">

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Создал товар с этим типом данных и заполнил 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>

*

john

  • ***
  • 207
  • +6/-0
    • Просмотр профиля
Пытался какое-нибудь условие подобрать, последнее что осталось (position() &gt; 0)
Спасибо, заработало.