Вывод производителей

#
Вывод производителей
Подскажите, пожалуйста, возможно ли сделать фильтрацию производителей по первой букве? т.е. мне нужно сделать вывод алфавита, а при клике по букве требуется отображение всех брендов на эту букву
#
Re: Вывод производителей
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">
                  &lt;/p&gt;&lt;p&gt;
               </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>&#xA0;
                </xsl:when>
                <xsl:otherwise>
                    <span>
                        <xsl:value-of select="$a"/>
                    </span>&#xA0;
                </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&amp;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">
            &lt;/td&gt;
            &lt;td width="50%"&gt;
         </xsl:text>
      </xsl:if>

      <xsl:if test="$divide_after = 0 and position() = last()">
         <xsl:text disable-output-escaping="yes">
            &lt;/td&gt;
            &lt;td width="50%" valign="top"&gt;
            &#160;
         </xsl:text>
      </xsl:if>
      
   </xsl:template>

   
</xsl:stylesheet>


Пример его работы вот тут: http://www.cd-classic.ru/shop/producers_list/

Для вызова надо-бы по-хорошему написать ТДСку, но мне когда-то было некогда, поэтому написал просто динамическую странцу прямо в редакторе структуры, а с тех пор переделать все руки не доходят. Поэтому в примере по ссылке вызывается оно так:
<?php
$shop = & singleton ('shop');

$xsl_name = 'CDC_МагазинПроизводитель';
$param['shop_id'] = 4;

$shop->ShowProducersList($xsl_name, $param);

?>
Заказов не беру. Консультирую редко.
#
Re: Вывод производителей
Да, надо уточнить, что в макете подключена js-библиотека prototype, и без нее приведенный в шаблоне javascript работать на будет, нужно заменять
$(), show() и hide()
на нативные конструкции.
Заказов не беру. Консультирую редко.
Авторизация