Выпадающее меню интернет-магазин + стурктуры
Добрый день!
В шапке реализован вывод 4-х пунктов меню:
Каталог
О магазине
Доставка
Контакты
У Пункта Каталог - выпадающее меню с группами магазина.
Прошу помочь в составлении правильного xsl
Нужно использовать его на базе
$Structure = & singleton('Structure');
$param = array();
$param['show_shop_groups'] = true;
$Structure->ShowStructure (1,'ВыпадающееМеню',$param);
Если да, то почему не выводятся пункты магазина?
Какой шаблон Меню xsl использовать?
Спасибо!
В шапке реализован вывод 4-х пунктов меню:
Каталог
О магазине
Доставка
Контакты
У Пункта Каталог - выпадающее меню с группами магазина.
Прошу помочь в составлении правильного xsl
Нужно использовать его на базе
$Structure = & singleton('Structure');
$param = array();
$param['show_shop_groups'] = true;
$Structure->ShowStructure (1,'ВыпадающееМеню',$param);
Если да, то почему не выводятся пункты магазина?
Какой шаблон Меню xsl использовать?
Спасибо!
Сейчас это реализовано так:
в макете страницы:
<!-- Top_Menu -->
<div class="menu_t">
<!-- Верхнее меню -->
<ul>
<li>
<div class="mt_s"><div class="mt_st"><div class="mt_sb"><div class="mt_sm">
<?php
// Проверяем, существует ли класс Интернет-магазина
if (class_exists('shop'))
{
$shop = & singleton('shop');
$shop_id = 1;
$param = array();
$param['items_on_page'] = 0;
$param['xml_show_group_type'] = 'all';
$param['xml_show_all_producers'] = false;
$param['xml_show_producers'] = false;
$param['xml_show_all_sellers'] = false;
$param['xml_show_tying_products'] = false;
$param['xml_show_modification'] = false;
$param['xml_show_group_property'] = false;
$param['xml_show_item_property'] = false;
$param['xml_show_tags'] = false;
$shop->ShowShop($shop_id, 'ВыпадающееМенюГруппыТоваров', $param);
}
?>
</div></div></div></div>
<a href="#"><span><span><span>Каталог</span></span></span></a>
<?php
$Structure = & singleton('Structure');
$param = array();
$param['show_shop_groups'] = true;
$param['level'] = 5;
$param['cache'] = false;
$Structure->ShowStructure (1,'ВыпадающееМеню',$param);
?>
</li>
</ul>
</div>
<!-- //Top_Menu -->
в шаблонах XSL:
ВыпадающееМенюГруппыТоваров
<?xml version="1.0" encoding="utf-8"?>
<!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="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<!-- МагазинГруппыТоваровНаГлавной -->
<xsl:template match="/">
<ul>
<xsl:apply-templates select="/shop"/>
</ul>
</xsl:template>
<!-- Шаблон для магазина -->
<xsl:template match="/shop">
<xsl:apply-templates select="group"/>
</xsl:template>
<!-- Шаблон для групп товара -->
<xsl:template match="group">
<li>
<!-- Если это подпункт (родитель не равен 0) - выводим слева от него тире -->
<xsl:if test="@parent != 0">
</xsl:if>
<a href="{/shop/path}{fullpath}" title="{name}">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
<!-- Если есть подгруппы -->
<xsl:if test="group">
<ul>
<xsl:apply-templates select="group"/>
</ul>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>
ВыпадающееМеню
<?xml version="1.0" encoding="utf-8"?>
<!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="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:template match="/document">
<!-- Выбираем узлы структуры первого уровня -->
<xsl:apply-templates select="structure[show=1]"/>
</xsl:template>
<xsl:template match="structure">
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
<li>
<!--
Выделяем текущую страницу добавлением к li класса red_li,
если это текущая страница, либо у нее есть ребенок с атрибутом id, равным текущей uheggt.
-->
<xsl:if test="current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">
<xsl:attribute name="class">red_li</xsl:attribute>
</xsl:if>
<!-- Показывать ссылку, или нет -->
<xsl:choose>
<xsl:when 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>
<!-- Ссылка на пункт меню -->
<a href="{$link}" title="{name}"><span><span><span><xsl:value-of disable-output-escaping="yes" select="name"/></span></span></span></a>
</xsl:when>
<!-- Если не показывать ссылку - выводим просто имя ссылки -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:template>
</xsl:stylesheet>
в макете страницы:
<!-- Top_Menu -->
<div class="menu_t">
<!-- Верхнее меню -->
<ul>
<li>
<div class="mt_s"><div class="mt_st"><div class="mt_sb"><div class="mt_sm">
<?php
// Проверяем, существует ли класс Интернет-магазина
if (class_exists('shop'))
{
$shop = & singleton('shop');
$shop_id = 1;
$param = array();
$param['items_on_page'] = 0;
$param['xml_show_group_type'] = 'all';
$param['xml_show_all_producers'] = false;
$param['xml_show_producers'] = false;
$param['xml_show_all_sellers'] = false;
$param['xml_show_tying_products'] = false;
$param['xml_show_modification'] = false;
$param['xml_show_group_property'] = false;
$param['xml_show_item_property'] = false;
$param['xml_show_tags'] = false;
$shop->ShowShop($shop_id, 'ВыпадающееМенюГруппыТоваров', $param);
}
?>
</div></div></div></div>
<a href="#"><span><span><span>Каталог</span></span></span></a>
<?php
$Structure = & singleton('Structure');
$param = array();
$param['show_shop_groups'] = true;
$param['level'] = 5;
$param['cache'] = false;
$Structure->ShowStructure (1,'ВыпадающееМеню',$param);
?>
</li>
</ul>
</div>
<!-- //Top_Menu -->
в шаблонах XSL:
ВыпадающееМенюГруппыТоваров
<?xml version="1.0" encoding="utf-8"?>
<!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="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<!-- МагазинГруппыТоваровНаГлавной -->
<xsl:template match="/">
<ul>
<xsl:apply-templates select="/shop"/>
</ul>
</xsl:template>
<!-- Шаблон для магазина -->
<xsl:template match="/shop">
<xsl:apply-templates select="group"/>
</xsl:template>
<!-- Шаблон для групп товара -->
<xsl:template match="group">
<li>
<!-- Если это подпункт (родитель не равен 0) - выводим слева от него тире -->
<xsl:if test="@parent != 0">
</xsl:if>
<a href="{/shop/path}{fullpath}" title="{name}">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
<!-- Если есть подгруппы -->
<xsl:if test="group">
<ul>
<xsl:apply-templates select="group"/>
</ul>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>
ВыпадающееМеню
<?xml version="1.0" encoding="utf-8"?>
<!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="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:template match="/document">
<!-- Выбираем узлы структуры первого уровня -->
<xsl:apply-templates select="structure[show=1]"/>
</xsl:template>
<xsl:template match="structure">
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
<li>
<!--
Выделяем текущую страницу добавлением к li класса red_li,
если это текущая страница, либо у нее есть ребенок с атрибутом id, равным текущей uheggt.
-->
<xsl:if test="current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">
<xsl:attribute name="class">red_li</xsl:attribute>
</xsl:if>
<!-- Показывать ссылку, или нет -->
<xsl:choose>
<xsl:when 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>
<!-- Ссылка на пункт меню -->
<a href="{$link}" title="{name}"><span><span><span><xsl:value-of disable-output-escaping="yes" select="name"/></span></span></span></a>
</xsl:when>
<!-- Если не показывать ссылку - выводим просто имя ссылки -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:template>
</xsl:stylesheet>
Реализовал благодаря наводке h4mpy
в теме
Вот так:
<?xml version="1.0" encoding="utf-8"?>
<!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="utf-8" 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[show=1]" mode="main"/>
</ul>
</xsl:template>
<xsl:template match="structure" mode="main">
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
<li>
<!-- Выбираем подузлы структуры -->
<xsl:if test="count(structure[show=1]) > 0">
<div class="mt_s"><div class="mt_st"><div class="mt_sb"><div class="mt_sm">
<ul>
<!-- Выбираем узлы структуры -->
<xsl:apply-templates select="structure[show=1]" mode="sub" />
</ul>
</div></div></div></div>
</xsl:if>
<!-- Показывать ссылку, или нет -->
<xsl:choose>
<xsl:when test="show_link = 1">
<!-- Определяем адрес ссылки -->
<xsl:variable name="link">
<xsl:value-of disable-output-escaping="yes" select="link"/>
</xsl:variable>
<!-- Ссылка на пункт меню -->
<a href="{$link}" title="{name}"><span><span><span><xsl:value-of disable-output-escaping="yes" select="name"/></span></span></span></a>
</xsl:when>
<!-- Если не показывать ссылку - выводим просто имя ссылки -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:template>
<xsl:template match="structure" mode="sub">
<li>
<a href="{link}" title="{name}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
<!-- Выбираем подузлы структуры -->
<xsl:if test="count(structure[show=1]) > 0">
<ul>
<!-- Выбираем узлы структуры -->
<xsl:apply-templates select="structure[show=1]" mode="sub" />
</ul>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>
в теме
Вот так:
<?xml version="1.0" encoding="utf-8"?>
<!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="utf-8" 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[show=1]" mode="main"/>
</ul>
</xsl:template>
<xsl:template match="structure" mode="main">
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
<li>
<!-- Выбираем подузлы структуры -->
<xsl:if test="count(structure[show=1]) > 0">
<div class="mt_s"><div class="mt_st"><div class="mt_sb"><div class="mt_sm">
<ul>
<!-- Выбираем узлы структуры -->
<xsl:apply-templates select="structure[show=1]" mode="sub" />
</ul>
</div></div></div></div>
</xsl:if>
<!-- Показывать ссылку, или нет -->
<xsl:choose>
<xsl:when test="show_link = 1">
<!-- Определяем адрес ссылки -->
<xsl:variable name="link">
<xsl:value-of disable-output-escaping="yes" select="link"/>
</xsl:variable>
<!-- Ссылка на пункт меню -->
<a href="{$link}" title="{name}"><span><span><span><xsl:value-of disable-output-escaping="yes" select="name"/></span></span></span></a>
</xsl:when>
<!-- Если не показывать ссылку - выводим просто имя ссылки -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:template>
<xsl:template match="structure" mode="sub">
<li>
<a href="{link}" title="{name}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
<!-- Выбираем подузлы структуры -->
<xsl:if test="count(structure[show=1]) > 0">
<ul>
<!-- Выбираем узлы структуры -->
<xsl:apply-templates select="structure[show=1]" mode="sub" />
</ul>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>
Авторизация