Скрыть вывод объекта, если он отсутствует

#
Скрыть вывод объекта, если он отсутствует
Здравствуйте!
Можно ли как-нибудь скрыть вывод объекта на странице, если отсутствует его наличие?
Например, у меня имеется вывод PDF на странице. Но PDF-файлы прикреплены не ко всем элементом одного типа (в данном случае товар). Можно ведь как-то сделать, что бы при незагруженном файле колонка с выводом пдф не отображалась на странице товара?

Так же существует блок для вывода схожих по меткам товаров. Так же нужно скрыть вывод, если метки отсутствуют. А то получаются пустые блоки с заголовком.

Вывод прописан в xsl-шаблоне.
#
Re: Скрыть вывод объекта, если он отсутствует
делать в xsl проверку на существование объекта или меток перед созданием блока
Заказов не беру. Консультирую редко.
#
Re: Скрыть вывод объекта, если он отсутствует
а как? что именно нужно прописать?
#
Re: Скрыть вывод объекта, если он отсутствует
quaka покажите кусок шаблона где вы выводите
Cоздание сайтов на базе HostCMS: верстка и интеграция макетов, настройка, обновление системы, консультации.
#
Re: Скрыть вывод объекта, если он отсутствует
quaka, для проверки существования единичных узлов используется свойство node() - оно возвращает true если узел существует.
Например, для следующего xml
<?xml version="1.0" encoding="utf-8"?>
<shop id="1" current_group_id="586">
   <user_id>0</user_id>
   <name>Демонстрационный магазин</name>
   <description></description>
   <path>/shop/</path>
   <site_id>1</site_id>
   <shop_image_small_max_width>100</shop_image_small_max_width>
   <shop_image_big_max_width>800</shop_image_big_max_width>
   <shop_image_small_max_height>100</shop_image_small_max_height>
   <shop_image_big_max_height>800</shop_image_big_max_height>
   <structure_id>42</structure_id>
   <shop_country_id>175</shop_country_id>
   <shop_currency id="1">
      <shop_currency_name>руб.</shop_currency_name>
      <shop_currency_international_name>RUR</shop_currency_international_name>
      <shop_currency_value_in_basic_currency>1.000000</shop_currency_value_in_basic_currency>
      <shop_currency_is_default>1</shop_currency_is_default>
   </shop_currency>   
   <tags>
      <tag id="69">
         <tag_name>Ardo</tag_name>
         <tag_description></tag_description>
         <tag_path_name>Ardo</tag_path_name>
         <count>2</count>
      </tag>
      <tag id="65">
         <tag_name>Ariston</tag_name>
         <tag_description></tag_description>
         <tag_path_name>Ariston</tag_path_name>
         <count>2</count>
      </tag>
      <tag id="87">
         <tag_name>Ballu</tag_name>
         <tag_description></tag_description>
         <tag_path_name>Ballu</tag_path_name>
         <count>1</count>
      </tag>
      <tag id="52">
         <tag_name>BBK</tag_name>
         <tag_description></tag_description>
         <tag_path_name>BBK</tag_path_name>
         <count>2</count>
      </tag>
      <tag id="73">
         <tag_name>BEKO</tag_name>
         <tag_description></tag_description>
         <tag_path_name>BEKO</tag_path_name>
         <count>2</count>
      </tag>
      <tag id="62">
         <tag_name>Bosch</tag_name>
         <tag_description></tag_description>
         <tag_path_name>Bosch</tag_path_name>
         <count>3</count>
      </tag>
      <tag id="16">
         <tag_name>Canon</tag_name>
         <tag_description></tag_description>
         <tag_path_name>Canon</tag_path_name>
         <count>3</count>
      </tag>
      <tag id="58">
         <tag_name>Cowon</tag_name>
         <tag_description></tag_description>
         <tag_path_name>Cowon</tag_path_name>
         <count>1</count>
      </tag>
      <tag id="82">
         <tag_name>Delonghi</tag_name>
         <tag_description></tag_description>
         <tag_path_name>Delonghi</tag_path_name>
         <count>1</count>
      </tag>
   </tags>
</shop>
проверка
<xsl:if test="/shop/user_id/node()"> узел существует </xsl:if>
выведет сообщение "узел существует", а проверка
<xsl:if test="/shop/unknown/node()"> узел существует </xsl:if>
не выведет ничего, потому что у узла shop нет дочернего узла с названием unknown.

Если узел существует, иногда бывает еще полезно проверить что его значение не равно нулю или что в нем есть хоть какой-то текст.
Примеры:
<xsl:if test="/shop/user_id/node() and /shop/user_id &gt; 0"> узел существует и его значение больше нуля </xsl:if>
<xsl:if test="/shop/name/node() and /shop/name != ''"> узел существует и в нем есть текст</xsl:if>


Если нужно проверить существование некоего множества узлов, то самый простой способ сделать это - посчитать их количество. Для этого используется функция count(), (хотя надо заметить что подсчет это весьма затратая функция, и в некоторых случаях способна снизить скорость генерации странички, но мы сейчас не будем на этом останавливаться).
Пример: следующий код, примененый к тому же xml который я привел выше
<xsl:if test="count(/shop/tags/tag) &gt; 0"> есть хотя бы одна метка </xsl:if>
выведет сообщение "есть хотя бы одна метка".
А этот код
<xsl:if test="count(/shop/item) &gt; 0"> есть хотя бы один товар </xsl:if>
не выведет ничего, потому что в приведенном (исключительно для примера!) xml нет ни одного товара.

Вот как-то так...
Заказов не беру. Консультирую редко.
#
Re: Скрыть вывод объекта, если он отсутствует
Евгений как всегда прекрасен =)
Cоздание сайтов на базе HostCMS: верстка и интеграция макетов, настройка, обновление системы, консультации.
#
Re: Скрыть вывод объекта, если он отсутствует
southart, Kotoff,
ну, есть 2 блока

вывод пдф, например
<div class="showpdf">
<img src="/images/pdf.png" align="absmiddle"/>
<a href="{property[@xml_name='file']/file_path}">Cкачать PDF</a>
</div>


и вывод схожих по меткам товаров
<xsl:apply-templates select="tags/tag"/></div>

<!-- Изображение для товара, если есть -->
<xsl:if test="image != ''">
<a href="{image}" class="highslide" onclick="return hs.expand(this)">
<img style="margin-left: 8%" src="{image}" class="te" alt="{name}"/>
</a>
</xsl:if>


то есть мне нужно заключить их в <xsl:if test="/shop/user_id/node() and /shop/user_id &gt; 0"> … ?
#
Re: Скрыть вывод объекта, если он отсутствует
quaka, ну при чем тут, в вашем случае, узел /shop/user_id Я приводил это просто для примера!

В вашем случае, для pdf надо проверять узел property[@xml_name='file']/file_path на то что он существует (функцией node()) и на то что он не равен '', а "больше ноля" тут не при чем.

а для тегов нужно делать проверку со счетчиком - count(tags/tag) должно быть больше нуля.
Заказов не беру. Консультирую редко.
Авторизация