Вывод производителей
Подскажите, пожалуйста, возможно ли сделать фильтрацию производителей по первой букве? т.е. мне нужно сделать вывод алфавита, а при клике по букве требуется отображение всех брендов на эту букву
gizma.vrn, да, возможно 
Например, с группировкой по методу Мюнха, вот таким шаблончиком:
Пример его работы вот тут:
Для вызова надо-бы по-хорошему написать ТДСку, но мне когда-то было некогда, поэтому написал просто динамическую странцу прямо в редакторе структуры, а с тех пор переделать все руки не доходят. Поэтому в примере по ссылке вызывается оно так:

Например, с группировкой по методу Мюнха, вот таким шаблончиком:
<?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:key name="a" match="producer" use="substring(name,1,1)"/>
<xsl:variable name="keystring" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ,АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ'"/>
<xsl:variable name="delimiter" select="','" />
<xsl:template match="/producerslist">
<SCRIPT>
<xsl:comment>
<xsl:text disable-output-escaping="yes">
<![CDATA[
function hide_all_children(container, start)
{
var Children = Array();
Children = $(container).childElements();
for (i=start; i<Children.length; i++)
{
$(Children[i]).hide()
}
}
function show_sect(itemId)
{
hide_all_children('producers_sections', 0);
$(itemId).show();
return false;
}
]]>
</xsl:text>
</xsl:comment>
</SCRIPT>
<h1>Каталог по производителям</h1>
<div id="alphabet">
<p>
<xsl:call-template name="alphabet_string">
<xsl:with-param name="s" select="$keystring"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
</xsl:call-template>
</p>
</div>
<div id="producers_sections">
<xsl:call-template name="alphabet_sect">
<xsl:with-param name="s" select="$keystring"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
</xsl:call-template>
</div>
<SCRIPT>
<xsl:comment>
<xsl:text disable-output-escaping="yes">
<![CDATA[
hide_all_children('producers_sections', 1);
]]>
</xsl:text>
</xsl:comment>
</SCRIPT>
</xsl:template>
<xsl:template name="alphabet_string">
<xsl:param name="s"/>
<xsl:param name="delimiter"/>
<xsl:variable name="a">
<xsl:value-of select="substring($s,1,1)"/>
</xsl:variable>
<xsl:variable name="s0">
<xsl:value-of select="substring-after($s,$a)"/>
</xsl:variable>
<xsl:if test="$s != ''">
<xsl:choose>
<xsl:when test="$a = $delimiter">
<xsl:text disable-output-escaping="yes">
</p><p>
</xsl:text>
<br/>
</xsl:when>
<xsl:when test=" key('a',$a)">
<a href="#{$a}" onclick="return show_sect('{$a}')" style="font-weight: bold">
<xsl:value-of select="$a"/>
</a> 
</xsl:when>
<xsl:otherwise>
<span>
<xsl:value-of select="$a"/>
</span> 
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="alphabet_string">
<xsl:with-param name="s" select="$s0"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="alphabet_sect">
<xsl:param name="s" />
<xsl:param name="delimiter"/>
<xsl:variable name="a">
<xsl:value-of select="substring($s,1,1)"/>
</xsl:variable>
<xsl:variable name="s0">
<xsl:value-of select="substring-after($s,$a)"/>
</xsl:variable>
<xsl:if test="$s != ''">
<xsl:choose>
<xsl:when test=" key('a',$a) and $a != $delimiter">
<div id="{$a}">
<h2>
<xsl:value-of select="$a"/>
</h2>
<xsl:variable name="column_break_pos">
<xsl:choose>
<xsl:when test="count(producer[substring(name,1,1) = $a]) > 17">
<xsl:value-of select="ceiling(count(producer[substring(name,1,1) = $a]) div 2)" />
</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr valign="top">
<td width="50%" valign="top">
<xsl:apply-templates select="producer[substring(name,1,1) = $a]">
<xsl:with-param name="divide_after" select="$column_break_pos" />
</xsl:apply-templates>
</td>
</tr>
</table>
</div>
</xsl:when>
</xsl:choose>
<xsl:call-template name="alphabet_sect">
<xsl:with-param name="s" select="$s0"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="producer">
<xsl:param name="divide_after" select="0" />
<p>
<a href="/shop/?action=all&producer_id={@id}" rel="nofollow"><xsl:value-of select="name" /></a>
</p>
<xsl:if test="$divide_after > 0 and $divide_after = position()">
<xsl:text disable-output-escaping="yes">
</td>
<td width="50%">
</xsl:text>
</xsl:if>
<xsl:if test="$divide_after = 0 and position() = last()">
<xsl:text disable-output-escaping="yes">
</td>
<td width="50%" valign="top">
 
</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<!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:key name="a" match="producer" use="substring(name,1,1)"/>
<xsl:variable name="keystring" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ,АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ'"/>
<xsl:variable name="delimiter" select="','" />
<xsl:template match="/producerslist">
<SCRIPT>
<xsl:comment>
<xsl:text disable-output-escaping="yes">
<![CDATA[
function hide_all_children(container, start)
{
var Children = Array();
Children = $(container).childElements();
for (i=start; i<Children.length; i++)
{
$(Children[i]).hide()
}
}
function show_sect(itemId)
{
hide_all_children('producers_sections', 0);
$(itemId).show();
return false;
}
]]>
</xsl:text>
</xsl:comment>
</SCRIPT>
<h1>Каталог по производителям</h1>
<div id="alphabet">
<p>
<xsl:call-template name="alphabet_string">
<xsl:with-param name="s" select="$keystring"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
</xsl:call-template>
</p>
</div>
<div id="producers_sections">
<xsl:call-template name="alphabet_sect">
<xsl:with-param name="s" select="$keystring"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
</xsl:call-template>
</div>
<SCRIPT>
<xsl:comment>
<xsl:text disable-output-escaping="yes">
<![CDATA[
hide_all_children('producers_sections', 1);
]]>
</xsl:text>
</xsl:comment>
</SCRIPT>
</xsl:template>
<xsl:template name="alphabet_string">
<xsl:param name="s"/>
<xsl:param name="delimiter"/>
<xsl:variable name="a">
<xsl:value-of select="substring($s,1,1)"/>
</xsl:variable>
<xsl:variable name="s0">
<xsl:value-of select="substring-after($s,$a)"/>
</xsl:variable>
<xsl:if test="$s != ''">
<xsl:choose>
<xsl:when test="$a = $delimiter">
<xsl:text disable-output-escaping="yes">
</p><p>
</xsl:text>
<br/>
</xsl:when>
<xsl:when test=" key('a',$a)">
<a href="#{$a}" onclick="return show_sect('{$a}')" style="font-weight: bold">
<xsl:value-of select="$a"/>
</a> 
</xsl:when>
<xsl:otherwise>
<span>
<xsl:value-of select="$a"/>
</span> 
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="alphabet_string">
<xsl:with-param name="s" select="$s0"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="alphabet_sect">
<xsl:param name="s" />
<xsl:param name="delimiter"/>
<xsl:variable name="a">
<xsl:value-of select="substring($s,1,1)"/>
</xsl:variable>
<xsl:variable name="s0">
<xsl:value-of select="substring-after($s,$a)"/>
</xsl:variable>
<xsl:if test="$s != ''">
<xsl:choose>
<xsl:when test=" key('a',$a) and $a != $delimiter">
<div id="{$a}">
<h2>
<xsl:value-of select="$a"/>
</h2>
<xsl:variable name="column_break_pos">
<xsl:choose>
<xsl:when test="count(producer[substring(name,1,1) = $a]) > 17">
<xsl:value-of select="ceiling(count(producer[substring(name,1,1) = $a]) div 2)" />
</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr valign="top">
<td width="50%" valign="top">
<xsl:apply-templates select="producer[substring(name,1,1) = $a]">
<xsl:with-param name="divide_after" select="$column_break_pos" />
</xsl:apply-templates>
</td>
</tr>
</table>
</div>
</xsl:when>
</xsl:choose>
<xsl:call-template name="alphabet_sect">
<xsl:with-param name="s" select="$s0"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="producer">
<xsl:param name="divide_after" select="0" />
<p>
<a href="/shop/?action=all&producer_id={@id}" rel="nofollow"><xsl:value-of select="name" /></a>
</p>
<xsl:if test="$divide_after > 0 and $divide_after = position()">
<xsl:text disable-output-escaping="yes">
</td>
<td width="50%">
</xsl:text>
</xsl:if>
<xsl:if test="$divide_after = 0 and position() = last()">
<xsl:text disable-output-escaping="yes">
</td>
<td width="50%" valign="top">
 
</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Пример его работы вот тут:
Для вызова надо-бы по-хорошему написать ТДСку, но мне когда-то было некогда, поэтому написал просто динамическую странцу прямо в редакторе структуры, а с тех пор переделать все руки не доходят. Поэтому в примере по ссылке вызывается оно так:
<?php
$shop = & singleton ('shop');
$xsl_name = 'CDC_МагазинПроизводитель';
$param['shop_id'] = 4;
$shop->ShowProducersList($xsl_name, $param);
?>
$shop = & singleton ('shop');
$xsl_name = 'CDC_МагазинПроизводитель';
$param['shop_id'] = 4;
$shop->ShowProducersList($xsl_name, $param);
?>
Заказов не беру. Консультирую редко.
Да, надо уточнить, что в макете подключена js-библиотека prototype, и без нее приведенный в шаблоне javascript работать на будет, нужно заменять
$(), show() и hide()
на нативные конструкции.
Заказов не беру. Консультирую редко.
Авторизация