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

#
Хлебные крошки
Добрый день.
Скажите пожалуйста, каким образом можно организовать такую навигацию, желательно одним xsl-шаблоном, который я мог бы включать в любую страницу?

раздел › подраздел › страница
#
Re: Хлебные крошки
одним шаблоном не получилось. пришлось использовать несколько. ну да лажно. сам дошел.
Модератор
#
Re: Хлебные крошки
Eugene Usenko писал(а):
раздел › подраздел › страница

Вам для структуры сайта?
Модератор
#
Re: Хлебные крошки
XSL-шаблон "Хлебные крошки" от 23.03.2008:
<?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">
      <a href="/">Главная</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">&#8594;</span>

   <!-- Показывать ссылку, или нет -->
   <xsl:choose>
   <xsl:when test="show_link = 1 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>


Код вызова:
<?
// Вывод строки навигации

$InformationSystem = & singleton('InformationSystem');

// Определяем информацию об информационной системе, связанной с текущим узлом
$InformationSystem_id = $InformationSystem->GetInformationSystemByStructureId(CURRENT_STRUCTURE_ID);

$property = array();

$external_propertys = array();

// Если с узлом структуры связана ИС
if ($InformationSystem_id)
{
   $result = $InformationSystem->GetInformationFromPath($InformationSystem_id, '', false);

   // определяем id информационного элемента
   if ($result['item'])
   {
      $item_id = $InformationSystem->GetIdInformationItem($result['item'], $result['group'], $InformationSystem_id);
   }
   else
   {
      $item_id = false;
   }

   if (is_array($result) && ($item_id != 0 || $result['group'] > 0))
   {
      // Передаем во внешние параметры ID элемента и группы
      $external_propertys['item'] = $item_id;
      $external_propertys['group'] = $result['group'];
   }
   
   $property['show_groups'] = true;
   $property['show_items'] = true;
   
   // Данные для хлебных крошек заполняем только для текущей ИС
   $property['show_information_systems'][] = $InformationSystem_id;
}

$structure = & singleton('Structure');
$structure->ShowStructure(false, 'ХлебныеКрошки', $property, $external_propertys);
?>


Устаревший XSL-шаблон для вывода пути к текущей страницы в структуре:

<?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 method="html" indent="yes" encoding="Windows-1251"/>

<xsl:template match="/document">

   <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
   <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>

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

</xsl:template>

<xsl:template match="structure">


<!-- Показывать ссылку, или нет -->
<xsl:if test="show_link=1">

   <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
   <xsl:variable name="parent_structure_id" select="id_parent"/>

   <!-- Выбираем все узлы структуры всех уровней вложенности -->
   <xsl:apply-templates select="//structure[@id = $parent_structure_id]"/>
   
   <!-- Определяем адрес ссылки -->
   <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>

   <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
   <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>

   <!-- Определяем стиль вывода ссылки -->
   <xsl:variable name="link_style"><xsl:choose>
      <!-- Выделяем текущую страницу жирным (если это текущая страница, либо у нее есть ребенок с ID, равным текущей) -->
      <xsl:when test="current_structure_id=@id">font-weight: bold</xsl:when>
      <!-- Иначе обычный вывод с пустым стилем -->
      <xsl:otherwise></xsl:otherwise>
   </xsl:choose></xsl:variable>

   <!-- Расчитываем размер отступа -->
   <xsl:variable name="padding" select="level * 10"/>

   <xsl:if test="$parent_structure_id != 0">--></xsl:if>

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

</xsl:if>

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

</xsl:template>
</xsl:stylesheet>
#
Re: Хлебные крошки
ага. код рабочий, а вот куда и как его ставить, что бы он показывал путь от главной страницы и до любого уровня, я так и не понял
шаблоны везде разные у меня используются и получается получить путь только от родительской группы ,а вот так что бы:
главная-раздел-подраздел не получается
Модератор
#
Re: Хлебные крошки
Absolut писал(а):
ага. код рабочий, а вот куда и как его ставить, что бы он показывал путь от главной страницы и до любого уровня, я так и не понял

в макет вставьте до вызова шаблонов страницы

Absolut писал(а):
шаблоны везде разные у меня используются и получается получить путь только от родительской группы ,а вот так что бы:
главная-раздел-подраздел не получается

у Вас не написано "Главная"? Так допишите вручную в шаблоне
#
Re: Хлебные крошки
Ээээ нет))))
вот есть у меня структура:
Главная страница
           Раздел
                 Подраздел
           Раздел
что нужно сделать, что бы была сквозная навигация?
втыкаю в макет главной-вообще ничего не происходит
Понимаю, что сам виноват, а справиться не могу(((
Модератор
#
Re: Хлебные крошки
Absolut писал(а):
что нужно сделать, что бы была сквозная навигация?

адрес сайта и данные доступа в админку вышлете в суппорт с описанием на примере что где и как должно выводиться и что Вы для этого сделали.
#
Re: Хлебные крошки
спасибо!
даже и не думал... сейчас вышлю
#
Re: Хлебные крошки
начинающий я ... спасибо огромное за помощь!
Авторизация