Меню

#
Re: Меню
и все равно ничего не выводит
#
Re: Меню
Nikita.bOFF, приведите XML-код и код XSL-шаблона.
#
Re: Меню
<?xml version="1.0" encoding="windows-1251"?>
<document>
<structure id="67" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Информация о компании</name>
<show>1</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>0</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/info/</link>
<propertys>
<property type="File" id="24" name="menu_img">
<property_name>menu_img</property_name>
<value>ico_info.gif</value>
<menu_img>ico_info.gif</menu_img>
<property_file_path>download_file.php?download_propertys_values_id=24</property_file_path></property>
</propertys>
</structure>
<structure id="85" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>ТОНАР</name>
<show>1</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>0</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/tonar/</link>
<structure id="86" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Продажа</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>85</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/tonar/sale/</link>
<propertys>
</propertys>
</structure>
<structure id="87" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Сервис</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>85</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/tonar/service/</link>
<propertys>
</propertys>
</structure>
<structure id="88" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Контакты</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>85</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/tonar/contacts/</link>
<propertys>
</propertys>
</structure>
<structure id="96" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Гарантийиное техническое обслуживание</name>
<show>0</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>85</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/tonar/garant_obsl/</link>
<propertys>
</propertys>
</structure>
<propertys>
</propertys>
</structure>
<structure id="70" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>FAW</name>
<show>1</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>0</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/faw/</link>
<structure id="98" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Запасные части</name>
<show>0</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>70</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/faw/zapasnye_chasti/</link>
<propertys>
</propertys>
</structure>
<structure id="71" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Продажа</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>70</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/faw/sale/</link>
<propertys>
</propertys>
</structure>
<structure id="72" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Сервис</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>70</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/faw/service/</link>
<propertys>
</propertys>
</structure>
<structure id="73" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Контакты</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>70</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/faw/contacts/</link>
<propertys>
</propertys>
</structure>
<propertys>
</propertys>
</structure>
<structure id="74" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>HIGER</name>
<show>1</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>0</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/higer/</link>
<structure id="76" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Сервис</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>74</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/higer/service/</link>
<propertys>
</propertys>
</structure>
<structure id="75" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Продажа</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>74</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/higer/sale/</link>
<propertys>
</propertys>
</structure>
<structure id="77" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Контакты</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>74</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/higer/contacts/</link>
<propertys>
</propertys>
</structure>
<propertys>
</propertys>
</structure>
<structure id="78" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Сервисный центр КАМАЗ</name>
<show>1</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>0</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/kamaz/</link>
<structure id="79" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Сервис</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>78</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/kamaz/service/</link>
<propertys>
</propertys>
</structure>
<structure id="80" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Контакты</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>78</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/kamaz/contacts/</link>
<propertys>
</propertys>
</structure>
<propertys>
</propertys>
</structure>
<structure id="81" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>ColorTech</name>
<show>1</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>0</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/colortech/</link>
<structure id="82" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Окраска</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>81</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/colortech/okraska/</link>
<propertys>
</propertys>
</structure>
<structure id="83" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Кузовной ремонт</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>81</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/colortech/kuzovnojj_remont/</link>
<propertys>
</propertys>
</structure>
<structure id="84" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Контакты</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>81</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/colortech/contacts/</link>
<propertys>
</propertys>
</structure>
<propertys>
</propertys>
</structure>
<structure id="93" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>ТО и ремонт</name>
<show>1</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>0</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/to/</link>
<structure id="94" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Сервис</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>93</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/to/service/</link>
<propertys>
</propertys>
</structure>
<structure id="95" menu_id="9">
<current_structure_id>67</current_structure_id>
<name>Контакты</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>93</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/to/contacts/</link>
<propertys>
</propertys>
</structure>
<propertys>
</propertys>
</structure>
</document>


<?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="no" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml" />

<xsl:template match="/document">
    <ul class="top_menu">
       <xsl:apply-templates select="structure[show=1]"/>
    </ul>
</xsl:template>

<xsl:template match="structure">

   <xsl:param name="posit" select="1" />

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

      <xsl:choose>
         <xsl:when test="level=0">
            <xsl:choose>
               <xsl:when test="count(structure[show=1]) > 0">
                  <xsl:apply-templates select="structure[show=1]"></xsl:apply-templates>              
               </xsl:when>        
            </xsl:choose>
         </xsl:when>
            
         <xsl:otherwise>
            <li>
               <xsl:if test="propertys/property/property_file_path!=''">
                  <img src="/{propertys/property/property_file_path}" />&#160;
               </xsl:if>
               <a href="{$link}"><xsl:value-of select="name"/></a>
            </li>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:if>
    
</xsl:template>
</xsl:stylesheet>
#
Re: Меню
а если выводить по вашему методу, то получаться:
<?xml version="1.0" encoding="windows-1251"?>
<document>
<structure id="99" menu_id="8">
<current_structure_id>67</current_structure_id>
<name>Свидетельства</name>
<show>0</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>66</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/about/svidetelstva/</link>
<propertys>
</propertys>
</structure>
<structure id="67" menu_id="8">
<current_structure_id>67</current_structure_id>
<name>Информация о компании</name>
<show>1</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>66</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/about/info/</link>
<propertys>
<property type="File" id="24" name="menu_img">
<property_name>menu_img</property_name>
<value>ico_info.gif</value>
<menu_img>ico_info.gif</menu_img>
<property_file_path>download_file.php?download_propertys_values_id=24</property_file_path></property>
</propertys>
</structure>
<structure id="68" menu_id="8">
<current_structure_id>67</current_structure_id>
<name>Правовая база</name>
<show>1</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>66</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/about/base/</link>
<propertys>
<property type="File" id="25" name="menu_img">
<property_name>menu_img</property_name>
<value>ico_law.gif</value>
<menu_img>ico_law.gif</menu_img>
<property_file_path>download_file.php?download_propertys_values_id=25</property_file_path></property>
</propertys>
</structure>
<structure id="69" menu_id="8">
<current_structure_id>67</current_structure_id>
<name>Контакты</name>
<show>1</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>66</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/about/contacts/</link>
<propertys>
<property type="File" id="26" name="menu_img">
<property_name>menu_img</property_name>
<value>ico_contacts.gif</value>
<menu_img>ico_contacts.gif</menu_img>
<property_file_path>download_file.php?download_propertys_values_id=26</property_file_path></property>
</propertys>
</structure>
</document>
#
Re: Меню
Nikita.bOFF, что значит "выводить по вашему методу"? А до этого откуда вы взяли XML-код??? Попробуйте использовать этот 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 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">

   <ul>
      <!-- Выбираем узлы структуры -->
      <xsl:apply-templates select="structure"/>
   </ul>
</xsl:template>

<xsl:template match="structure">
<li>
   <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
   <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
   
   <!-- Расчитываем размер отступа -->
   <xsl:variable name="padding" select="level * 10" />
   
      <!-- Показывать ссылку, или нет -->
      <xsl:if test="show_link = 1">
      
         <!-- Определяем адрес ссылки -->
         <xsl:variable name="link"><xsl:choose>
            <!-- Если внешняя ссылка -->
            <xsl:when test="is_external_link=1"><xsl:value-of disable-output-escaping="yes" select="external_link"/></xsl:when>
            <!-- Иначе если внутренняя ссылка -->
            <xsl:otherwise><xsl:value-of disable-output-escaping="yes" select="link"/></xsl:otherwise>
         </xsl:choose></xsl:variable>
         
         <!-- Определяем стиль вывода ссылки -->
         <xsl:variable name="link_style"><xsl:choose>
            <!-- Выделяем текущую страницу жирным (если это текущая страница, либо у нее есть ребенок с ID, равным текущей) -->
            <xsl:when test="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">font-weight: bold</xsl:when>
            <!-- Иначе обычный вывод с пустым стилем -->
            <xsl:otherwise></xsl:otherwise>
         </xsl:choose></xsl:variable>
         
         <xsl:choose>
            <!-- Выделяем текущую страницу жирным (если это текущая страница, либо у нее есть ребенок с ID, равным текущей) -->
            <xsl:when test="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">
            <a href="{$link}"><font color="#942121"><xsl:value-of disable-output-escaping="yes" select="name"/></font></a></xsl:when>
            <!-- Иначе обычный вывод с пустым стилем -->
            <xsl:otherwise>
            
            
            <a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
            
            
            
            </xsl:otherwise>
         </xsl:choose>
         
      </xsl:if>
      
      <!-- Если не показывать ссылку - выводим просто имя ссылки -->
      <xsl:if test="show_link=0">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </xsl:if>



   <!-- Выбираем подузлы структуры -->
   
   
   <xsl:if test="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">
   <xsl:if test="count(structure[show=1]) > 1">

   <ul>
      <!-- Выбираем узлы структуры -->
      <xsl:apply-templates select="structure"/>
      
   </ul>
</xsl:if>
   
   </xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>

#
Re: Меню
Огроменное вам спасибо
#
Re: Меню
Мда... Все это, конечно, хорошо...
НО! Все ваши варианты выводят только 2 уровня вложенности.
А как быть, если вложенностей не 2, а 3, 4 и более? И сколько в конечном итоге будет, неизвестно, может 10.
www.chr21.ru
Модератор
#
Re: Меню
alexmak,
универсального шаблона для вывода многоуровневого меню нет, у одного пользователя он должен выглядеть по одному, у другого - иначе и так далее.
Вначале берут скрипт с многоуровневым выпадающим меню и делают из него XSL, а не наоборот.
#
Re: Меню
HostCMS писал(а):
универсального шаблона для вывода многоуровневого меню нет, у одного пользователя он должен выглядеть по одному, у другого — иначе и так далее.
Вначале берут скрипт с многоуровневым выпадающим меню и делают из него XSL, а не наоборот.

Понятно. Хорошо, будем учиться.
www.chr21.ru
#
Re: Меню
А может быть где-то есть что-то подобное уже готовое?
Слабоват я в программировании. А с XSL вообще впервые сталкиваюсь.
www.chr21.ru
Авторизация