UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: diii3 от 27 Января 2012, 12:23:42

Название: Вывод картинки "Нет фото"
Отправлено: diii3 от 27 Января 2012, 12:23:42
Здравствуйте! Не могу решить вроде не сложный вопрос) Среди свойств объекта каталога есть фотография. Нужно сделать так, чтобы после добавления объекта без фотографии, выводилась картинка "Нет фото" в поле его изображения в каталоге. Как правильно это сделать?
Название: Re:Вывод картинки "Нет фото"
Отправлено: BaceH от 27 Января 2012, 16:24:10
посмотрите файл xsltTpls/library/thumbnails.xsl шаблон <xsl:template name="catalog-thumbnail">
конструкция которая выводит картинку или надпись "нету"
<xsl:with-param name="src">

<xsl:choose>

<xsl:when test="$property/value">

<xsl:value-of select="$property/value" />

</xsl:when>

<xsl:otherwise>&empty-photo;</xsl:otherwise>

</xsl:choose>

</xsl:with-param>
в секции <xsl:otherwise>&empty-photo;</xsl:otherwise> пропишите адресс к своему изображению
Название: Re:Вывод картинки "Нет фото"
Отправлено: aizul от 08 Февраля 2012, 15:41:31
Не буду заводить новый топик, спрошу здесь...
Как сделать тоже самое только для картинки анонса новости?
Название: Re:Вывод картинки "Нет фото"
Отправлено: BaceH от 08 Февраля 2012, 16:05:42
покажите шаблон где выводиться анонс с картинкой.
Название: Re:Вывод картинки "Нет фото"
Отправлено: aizul от 08 Февраля 2012, 16:12:03
Вот /xsltTpls/modules/news.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:umi="http://www.umi-cms.ru/TR/umi"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="result[@module = 'news' and @method = 'item']">
<xsl:value-of select="page//property[@name = 'content']/value" disable-output-escaping="yes" />
</xsl:template>

<xsl:template match="result[@module = 'news' and @method = 'rubric']">
<xsl:apply-templates select="document('udata://news/lastlist')/udata" />
</xsl:template>

<xsl:template match="udata[@module = 'news' and @method = 'lastlist']">
<xsl:apply-templates select="items">
<xsl:with-param name="list-class">
<xsl:text>news-lastlist</xsl:text>
</xsl:with-param>
</xsl:apply-templates>
</xsl:template>


<xsl:template match="udata[@method = 'lastlist']//item">
<xsl:param name="item-info" select="document(concat('upage://', @id))" />
<xsl:variable name="date" select="document(concat('udata://system/convertDate/', @publish_time, '/(d-m-Y)'))/udata" />
<li>
<a href="{@link}" umi:element-id="{@id}" umi:field-name="name">
<xsl:value-of select="." />
</a>

<xsl:text> (</xsl:text>
<span umi:element-id="{@id}" umi:field-name="publish_time" umi:format="d-m-Y">
<xsl:value-of select="$date" />
</span>
<xsl:text>)</xsl:text>

<a href="{@link}" umi:element-id="{@id}" umi:field-name="name">
<xsl:apply-templates select="document(concat('upage://', @id, '.anons_pic'))/udata">
<xsl:with-param name="page-id" select="@id" />
</xsl:apply-templates></a>

<xsl:value-of select="$item-info//property[@name = 'anons']/value" disable-output-escaping="yes" />
</li>
</xsl:template>

<!-- short_list -->
<xsl:template match="udata[@module = 'news' and @method = 'lastlist']" mode="short_list">
<xsl:apply-templates select="items" mode="short_list">
<xsl:with-param name="list-class">
<xsl:text>news-lastlist</xsl:text>
</xsl:with-param>
</xsl:apply-templates>
</xsl:template>


<xsl:template match="udata[@method = 'lastlist']//item"  mode="short_list">
<xsl:param name="item-info" select="document(concat('upage://', @id))" />
<xsl:variable name="date" select="document(concat('udata://system/convertDate/', @publish_time, '/(d-m-Y)'))/udata" />
<li>
<a href="{@link}" umi:element-id="{@id}" umi:field-name="name">
<xsl:value-of select="." />
</a>

<xsl:text> (</xsl:text>
<span umi:element-id="{@id}" umi:field-name="publish_time" umi:format="d-m-Y">
<xsl:value-of select="$date" />
</span>
<xsl:text>)</xsl:text>

<!--<xsl:apply-templates select="document(concat('upage://', @id, '.anons_pic'))/udata">
<xsl:with-param name="page-id" select="@id" />
</xsl:apply-templates>-->
</li>
</xsl:template>
<!-- short_list -->


<xsl:template match="property[@name = 'anons_pic']">
<xsl:param name="page-id" />


<img align="right" src="/images/autothumbs{value/@folder}/{value/@name}_50_.{value/@ext}"
umi:element-id="{$page-id}"
umi:field-name="{@name}"
/>

</xsl:template>

<xsl:template match="udata[@module = 'system' and @method = 'makeThumbnail']">
<xsl:param name="page-id" />
<xsl:param name="object-id" />
<xsl:param name="field-name" />

<img src="{src}" umi:element-id="{$page-id}" umi:object-id="{$object-id}" umi:field-name="{$field-name}" />
</xsl:template>


</xsl:stylesheet>
Название: Re:Вывод картинки "Нет фото"
Отправлено: BaceH от 08 Февраля 2012, 22:49:14
правим шаблон <xsl:template match="property[@name = 'anons_pic']">
<xsl:choose> 
          <xsl:when test="{value/@name}">
//если присутствует название картинки выводим картинку
  <img align="right" src="/images/autothumbs{value/@folder}/{value/@name}_50_.{value/@ext}"
umi:element-id="{$page-id}"
umi:field-name="{@name}"
/>
</xsl:when>
          <xsl:otherwise>
  //иначе выводим свою картинку
  //проверяем размер создаваемых превьющек, и делаем тако го же размера заглушку
  //либо продублировать в теге img высоту и ширину
<img align="right" src="выводим_путь_к_своей_картинке.жипег"/>
  </xsl:otherwise>
     </xsl:choose>
Название: Re:Вывод картинки "Нет фото"
Отправлено: aizul от 09 Февраля 2012, 09:54:13
Что-то не работает. Шаблон <xsl:template match="property[@name = 'anons_pic']"> исправил на такой:
	<xsl:template match="property[@name = 'anons_pic']">
<xsl:param name="page-id" />

<xsl:choose>
          <xsl:when test="{value/@name}">

  <img align="right" src="/images/autothumbs{value/@folder}/{value/@name}_50_.{value/@ext}"
umi:element-id="{$page-id}"
umi:field-name="{@name}"
/>
</xsl:when>
          <xsl:otherwise>
<img align="right" src="111.jpg"/>
  </xsl:otherwise>
     </xsl:choose>

</xsl:template>
Название: Re:Вывод картинки "Нет фото"
Отправлено: BaceH от 09 Февраля 2012, 10:35:32
возможно причина ошибки состоит при вызове шаблона
<!--<xsl:apply-templates select="document(concat('upage://', @id, '.anons_pic'))/udata">
<xsl:with-param name="page-id" select="@id" />
</xsl:apply-templates>-->
исправить
<xsl:apply-templates select="document(concat('upage://', @id, '.anons_pic'))/udata">
<xsl:with-param name="page-id" select="@id" />
</xsl:apply-templates>

и еще, заглушка 111.jpg в какой папке находится?
Название: Re:Вывод картинки "Нет фото"
Отправлено: aizul от 09 Февраля 2012, 11:26:36
Вот исправленный код:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:umi="http://www.umi-cms.ru/TR/umi"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="result[@module = 'news' and @method = 'item']">
<xsl:value-of select="page//property[@name = 'content']/value" disable-output-escaping="yes" />
</xsl:template>

<xsl:template match="result[@module = 'news' and @method = 'rubric']">
<xsl:apply-templates select="document('udata://news/lastlist')/udata" />
</xsl:template>

<xsl:template match="udata[@module = 'news' and @method = 'lastlist']">
<xsl:apply-templates select="items">
<xsl:with-param name="list-class">
<xsl:text>news-lastlist</xsl:text>
</xsl:with-param>
</xsl:apply-templates>
</xsl:template>


<xsl:template match="udata[@method = 'lastlist']//item">
<xsl:param name="item-info" select="document(concat('upage://', @id))" />
<xsl:variable name="date" select="document(concat('udata://system/convertDate/', @publish_time, '/(d-m-Y)'))/udata" />
<li>
<a href="{@link}" umi:element-id="{@id}" umi:field-name="name">
<xsl:value-of select="." />
</a>

<xsl:text> (</xsl:text>
<span umi:element-id="{@id}" umi:field-name="publish_time" umi:format="d-m-Y">
<xsl:value-of select="$date" />
</span>
<xsl:text>)</xsl:text>

<a href="{@link}" umi:element-id="{@id}" umi:field-name="name">
<xsl:apply-templates select="document(concat('upage://', @id, '.anons_pic'))/udata">
<xsl:with-param name="page-id" select="@id" />
</xsl:apply-templates></a>

<xsl:value-of select="$item-info//property[@name = 'anons']/value" disable-output-escaping="yes" />
</li>
</xsl:template>

<!-- short_list -->
<xsl:template match="udata[@module = 'news' and @method = 'lastlist']" mode="short_list">
<xsl:apply-templates select="items" mode="short_list">
<xsl:with-param name="list-class">
<xsl:text>news-lastlist</xsl:text>
</xsl:with-param>
</xsl:apply-templates>
</xsl:template>


<xsl:template match="udata[@method = 'lastlist']//item"  mode="short_list">
<xsl:param name="item-info" select="document(concat('upage://', @id))" />
<xsl:variable name="date" select="document(concat('udata://system/convertDate/', @publish_time, '/(d-m-Y)'))/udata" />
<li>
<a href="{@link}" umi:element-id="{@id}" umi:field-name="name">
<xsl:value-of select="." />
</a>

<xsl:text> (</xsl:text>
<span umi:element-id="{@id}" umi:field-name="publish_time" umi:format="d-m-Y">
<xsl:value-of select="$date" />
</span>
<xsl:text>)</xsl:text>

<xsl:apply-templates select="document(concat('upage://', @id, '.anons_pic'))/udata">
<xsl:with-param name="page-id" select="@id" />
</xsl:apply-templates>
</li>
</xsl:template>
<!-- short_list -->


<xsl:template match="property[@name = 'anons_pic']">
<xsl:param name="page-id" />

<xsl:choose>
          <xsl:when test="{value/@name}">

  <img align="right" src="/images/autothumbs{value/@folder}/{value/@name}_50_.{value/@ext}"
umi:element-id="{$page-id}"
umi:field-name="{@name}"
/>
</xsl:when>
          <xsl:otherwise>
<img align="right" src="/images/cms/design/video-blok.jpg"/>
  </xsl:otherwise>
     </xsl:choose>

</xsl:template>

<xsl:template match="udata[@module = 'system' and @method = 'makeThumbnail']">
<xsl:param name="page-id" />
<xsl:param name="object-id" />
<xsl:param name="field-name" />

<img src="{src}" umi:element-id="{$page-id}" umi:object-id="{$object-id}" umi:field-name="{$field-name}" />
</xsl:template>


</xsl:stylesheet>
После этого сайт перестает работать.
Название: Re:Вывод картинки "Нет фото"
Отправлено: admin от 09 Февраля 2012, 13:00:30
у вас там смутно в месте где идет вызов

<xsl:apply-templates select="document(concat('upage://', @id, '.anons_pic'))/udata">
<xsl:with-param name="page-id" select="@id" />
</xsl:apply-templates>

и где идет шаблон для этих узлов
<xsl:template match="property[@name = 'anons_pic']">...

я бы написал точнее,
<xsl:apply-templates select="document(concat('upage://', @id, '.anons_pic'))//property ">
<xsl:with-param name="page-id" select="@id" />
</xsl:apply-templates>
так как в вызове возвращается udata  узел со всем содержимым, а в шаблоне для вызова в match стоит уже property.
наверняка, проблема в какой-то мелочи...

Вот пример кода для вывода картинки anons_pic
<xsl:template match="udata[@module = 'news' and @method = 'lastlist']" mode="short_list">
<xsl:apply-templates select="items/item" mode="short_list" />

</xsl:template>

<xsl:template match="item" mode="short_list">
<xsl:variable name="item-info" select="document(@xlink:href)" />

<div class="news_yslygi_item" umi:element-id="{@id}" umi:region="row">
<div >
<a href="{@link}" umi:field-name="name" umi:empty="пусто">
<xsl:value-of select="." />
</a>
</div>
<div>
<a href="{@link}" umi:field-name="anons_pic" umi:empty="картинка">
<xsl:choose>
<xsl:when test="$item-info//property[@name='anons_pic']/value">
<xsl:variable name="src" select="$item-info//property[@name='anons_pic']/value" />
<xsl:variable name="img_width" select="310" />
<xsl:variable name="img_height" select="auto" />

<xsl:variable name="thumb" select="document(concat('udata://system/makeThumbnail/(.',$src,')/',$img_width,'/',$img_height))/udata/src" />
<img src="{$thumb}"/>
</xsl:when>
<xsl:otherwise>нет картинки</xsl:otherwise>
</xsl:choose>
</a>

</div>
</div>
</xsl:template>

Название: Re:Вывод картинки "Нет фото"
Отправлено: aizul от 09 Февраля 2012, 16:12:00
Большое спасибо, все работает.
Название: Re:Вывод картинки "Нет фото"
Отправлено: diii3 от 11 Февраля 2012, 21:26:08
Здравствуйте! Если не сложно, по поводу первого сообщения в теме. Не получается разобраться. Есть две строки.

В одной вывод картинки (точнее группы свойств объекта)

<xsl:apply-templates select="document(concat('upage://', @id))/udata/page/properties/group[@name='svojstva_obekta_nedvizhimosti']/property" mode="bl5"/>

Ну и обработчие вывода изображения

  <xsl:template match="property[@type='img_file']" mode="bl5">
 
    <div class="img"> 
      <img src="{.//value}" width="150" />     
    </div>   
   
  </xsl:template>

Подскажите, пожалуйста, как здесь сделать так, чтобы при отсутствии изображения выводилась картинка "Нет фото".


Название: Re:Вывод картинки "Нет фото"
Отправлено: diii3 от 11 Февраля 2012, 22:24:03
Все разобрался) Нужно было изменить первый код. Спасибо.