Хлебные крошки

Модератор
#
Re: Хлебные крошки
Varkolak,
Сейчас отредактирую первое сообщение, приведу пример для общих хлебных крошек для ИС и структуры. С магазином связь должна быть со следующей версии.
Прошу обратить внимание на необходимость обновления класса информационных систем, обновленный класс сегодня будет размещен в дистрибутиве Free редакции, также его можно запросить в поддержке.
#
Re: Хлебные крошки
Чтобы убрать ссылку с последнего элемента пишу проверку:

<xsl:choose>
<xsl:when test="$current_structure_id != @id">
<a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</xsl:otherwise>
</xsl:choose>

Выдает ошибку, мол не понятно что за current_structure_id  в шаблоне...
Что исправить?
Интеграция дизайна, доработка кода системы, техническое обслуживание сайтов на HostCMS
#
Re: Хлебные крошки
Приведите полный код XSL-шаблона(или напишите ссылку на страницу форума, откуда был взят XSL-шаблон).
#
Re: Хлебные крошки
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml" />

<!-- Хлебные крошки -->

<xsl:template match="/document">
  
   <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
   <xsl:variable name="current_structure_id"><xsl:choose>
      <xsl:when test="item/node()">item_<xsl:value-of select="item"/></xsl:when>
      <xsl:when test="group/node()">group_<xsl:value-of select="group"/></xsl:when>
      <xsl:otherwise><xsl:value-of select="structure/current_structure_id"/></xsl:otherwise>
   </xsl:choose></xsl:variable>
  

   <xsl:if test="count(//structure[@id = $current_structure_id]) > 0">

<!-- Если не на главной, то показываем Хлебные крошки -->  
     <xsl:if test="//structure[@id = $current_structure_id]/link != '/'">
          <a href="/">Главная</a>
          <!-- Выбираем все узлы структуры всех уровней вложенности -->
          <xsl:apply-templates select="//structure[@id = $current_structure_id]"/>

   </xsl:if>


   </xsl:if>

</xsl:template>

<xsl:template match="structure">

   <!-- Показывать ссылку, или нет -->
   <xsl:if test="show_link=1">
  
      <!-- Выбираем все узлы структуры всех уровней вложенности -->
      <xsl:apply-templates select="parent::structure"/>
      
      <!-- Определяем адрес ссылки -->
      <xsl:variable name="link"><xsl:choose>
         <!-- Если внешняя ссылка -->
         <xsl:when test="is_external_link=1"><xsl:value-of disable-output-escaping="yes" select="is_external_link"/></xsl:when>
         <!-- Иначе если внутренняя ссылка -->
         <xsl:otherwise><xsl:value-of disable-output-escaping="yes" select="link"/></xsl:otherwise>
      </xsl:choose></xsl:variable>
  
<img hspace="4" src="/images/pointer.gif" border="0"/>
  

<a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>


        
   </xsl:if>
  



   <!-- Если не показывать ссылку - выводим просто имя ссылки -->
   <xsl:if test="show_link=0">
      <xsl:value-of disable-output-escaping="yes" select="name"/>
   </xsl:if>

</xsl:template>

</xsl:stylesheet>
Интеграция дизайна, доработка кода системы, техническое обслуживание сайтов на HostCMS
Модератор
#
Re: Хлебные крошки
3dkvadrat,
на первой странице темы вывесил обновленный (от 19-01-2008) XSL-шаблон и код вызова, в которых текущий элемент не выделяется ссылкой.
Модератор
#
Re: Хлебные крошки
На первой странице темы опубликовано обновление от 23.03.2008
#
Re: Хлебные крошки
Здравствуйте.
Есть две проблемы, связанные с хлебными крошками по приведенному на первой странице топика коду.

Во1х, у меня в корне сайта размещена инфосистема. Соответсвующую константу для ее отображения я включил. Но как только я добавляю в шаблон страницы хлебные крошки так сразу инфосистема с морды сайта пропадает.
Эту проблему удалось обойти, изменив начало кода:

   $InformationSystem = & singleton('InformationSystem');
      
// Определяем информацию об информационной системе, связанной с текущим узлом      
   
//*** не работает: **//         
//$InformationSystem_id = $InformationSystem->GetInformationSystemByStructureId(CURRENT_STRUCTURE_ID);
      
      // ********** Видимо должно быть так:/*      
if (!$InformationSystem_id) {$InformationSystem_id = $InformationSystem->GetInformationSystemByStructureId(CURRENT_STRUCTURE_ID);}


Не понятно почему, но это работает.

Вторая проблема - с интернет магазином в крошках.
В код добавил строки

$property['show_shop_groups'] = true;
$property['show_shop_items'] = true;

в генерируемом XML группы и товары магазина присутствуют. Но строка с хлебными крошками оканчивается названием магазина.
Т.е., например, Главная -> Интернет-магазин, а при нахождении внутри магазина группы не отображаются. Видимо нужны какие-то еще изменения, по аналогии с определением текущей группы и элемента в инфосистеме с последующей передачей их в external propertys?
Заказов не беру. Консультирую редко.
Модератор
#
Re: Хлебные крошки
Kotoff001,
Зачем использовать настолько старую версию кода? На демо-сайте есть новая версия и XSL-шаблона, и кода вызова (он правда побольше приведенного здесь, т.к. содержит крошки для магазина и ИС).
#
Re: Хлебные крошки
Сделал вызов Хлебных Крошек для заголовков страницы, проблема в том, что он показывает ссылку на главную страницу, где бы я не находился, выглядит примерно так "<a href="/">главная</a>О нас / История, подскажите как сделать чтобы он выводил просто структуру сайта и если есть возможность чтобы игнорировал определённые символы (например коды <br>, которые в названиях раздела сайта содержаться), а также добавлял символы между разделами, например "Главная / о нас / продукты"
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>

   <!-- Хлебные крошки -->

   <xsl:template match="/document">

      <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
      <xsl:variable name="current_structure_id">
         <xsl:choose>
            <xsl:when test="item/node()">item_<xsl:value-of select="item"/></xsl:when>
            <xsl:when test="group/node()">group_<xsl:value-of select="group"/></xsl:when>
            <xsl:otherwise>
               <xsl:value-of select="structure/current_structure_id"/>
            </xsl:otherwise>
         </xsl:choose>
      </xsl:variable>

      <xsl:if test="count(//structure[@id = $current_structure_id]) &gt; 0">
         <a href="/"><xsl:value-of disable-output-escaping="yes" select="structure[link = '/']/name"/></a>
         <xsl:apply-templates select="//structure[@id = $current_structure_id]">
            <xsl:with-param name="is_last_item" select="1"/>
         </xsl:apply-templates>
      </xsl:if>
   </xsl:template>

   <xsl:template match="structure">

      <xsl:param name="is_last_item" select="0"/>

      <!-- Выбираем все узлы структуры всех уровней вложенности -->
      <xsl:apply-templates select="parent::structure"/>

      <!-- Определяем адрес ссылки -->
      <xsl:variable name="link">
         <xsl:choose>
            <!-- Если внешняя ссылка -->
            <xsl:when test="is_external_link=1">
               <xsl:value-of disable-output-escaping="yes" select="is_external_link"/>
            </xsl:when>
            <!-- Иначе если внутренняя ссылка -->
            <xsl:otherwise>
               <xsl:value-of disable-output-escaping="yes" select="link"/>
            </xsl:otherwise>
         </xsl:choose>
      </xsl:variable>

      <span class="path_arrow">&#x2192;</span>

      <!-- Показывать ссылку, или нет -->
      <xsl:choose>
         <xsl:when test="show_link = 0 and $is_last_item = 0">

            <a href="{$link}">
               <xsl:value-of disable-output-escaping="yes" select="name"/>
            </a>
         </xsl:when>
         <!-- Если не показывать ссылку - выводим просто имя ссылки -->
         <xsl:otherwise>
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:template>
</xsl:stylesheet>
Модератор
#
Re: Хлебные крошки
aNt1,
на сколько я помню этот вопрос решался в другой Вашей теме
Авторизация