Вопрос реализации функционала по вашему разделу "Cписок дилеров"

#
Вопрос реализации функционала по вашему разделу "Cписок дилеров"
Здравствуйте!

Помогите разобраться могу ли реализовать в редакции Халява схожий функционал (представление) как на вашем сайте - раздел http://www.hostcms.ru/partners/

Инфо система
группа это город,элемент в группе это дилеры
прально?

И далее главное -
Развертывание очень интересует

В попытке получить тоже самое -
сохранил страницу в виде html c файлами,получил на руках реализацию но вопрос как ее запихнуть в xls

То есть хотел бы чтобы помогли малость словами даннную реализацию...


СПасибо заранее!
ку
Модератор
#
Re: Вопрос реализации функционала по вашему разделу "Cписок дилеров"
compaq,
Реализовать такое можно.
Для начала рекомендую теорию группировки почитать, например здесь я размещал примеры: http://www.hostcms.ru/forums/22/111/

Элементы не делятся по группам, у них в доп. св-ве указывается страна и город.

Привожу краткий пример:
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common">
   <xsl:output method="html" indent="yes" encoding="Windows-1251"/>

   <!-- Ключ для группировки стран -->
   <xsl:key name="key-country" match="item" use="item_propertys/item_property[@xml_name='country']/value"/>

   <!-- Ключ для группировки городов -->
   <xsl:key name="key-city" match="item" use="item_propertys/item_property[@xml_name='city']/value"/>

   <xsl:template match="/">
      <xsl:apply-templates/>
   </xsl:template>

   <xsl:template match="/document">

      <!-- Если в находимся корне - выводим название информационной системы -->
      <xsl:if test="blocks/parent_group_id=0">
         <h1>
            <xsl:value-of disable-output-escaping="yes" select="blocks/name"/>
         </h1>
         <xsl:value-of disable-output-escaping="yes" select="blocks/description"/>
      </xsl:if>


      <xsl:if test="count(blocks/groups/group) &gt; 0">
         <!-- Отображение подгрупп данной группы -->
         <table border="" cellspacing="0" cellpadding="2">
            <tr>
               <xsl:apply-templates select="blocks/groups/group">
                  <xsl:sort select="@order"/>
               </xsl:apply-templates>
            </tr>
         </table>
      </xsl:if>

      <!-- Выбираем уникальные страны -->
      <xsl:variable name="unique_country" select="blocks/items//item[generate-id(.)=generate-id(key('key-country',item_propertys/item_property[@xml_name='country']/value))]/item_propertys/item_property[@xml_name='country']/value"/>

      <p style="padding-top: 0px; font-size: 120%">Страны:
      <!-- Выводим список стран с количеством дилеров -->

         <!-- Цикл по странам -->
         <xsl:for-each select="$unique_country">

            <!-- Сортируем по названию -->
            <xsl:sort select="." order="ascending"/>

            <!-- Выводим название страны -->
               <a href="#{current()}">
                  <xsl:value-of select="current()"/>
               </a>

               <xsl:if test="position() != last()">, </xsl:if>

         </xsl:for-each>
      </p>

      <!-- Цикл по странам -->
      <xsl:for-each select="$unique_country">

         <!-- Россия должна быть первой -->
         <xsl:sort select=". = 'Россия'" order="descending"/>

         <!-- Сортируем по названию -->
         <xsl:sort select="." order="ascending"/>

         <xsl:variable name="country" select="."/>

         <!-- Выводим название страны -->
         <p style="font-size: 170%">
            <a name="{current()}" style="color: #000;"><xsl:value-of select="current()"/></a>
         </p>


         <!-- ПОКАЗЫВАЕМ ГОРОДА СТРАНЫ -->

         <!-- Выбираем уникальные города, более быстрый способ -->
         <xsl:variable name="unique_city"
                       select="//item[generate-id(.)=generate-id(key('key-city',item_propertys/item_property[@xml_name='city']/value)) and item_propertys/item_property[@xml_name='country']/value=$country]/item_propertys/item_property[@xml_name='city']/value"/>

         <!-- Отображение записи информационного блока -->
         <table cellspacing="0" cellpadding="5" width="100%">

            <!-- Цикл по городам -->
            <xsl:for-each select="$unique_city">
                           
               <!-- Сортируем по названию -->
               <xsl:sort select="." order="ascending"/>
               <tr>
                  <td>
                     <p class="city"><span style="border-bottom: 1px dashed #000; cursor:pointer; color: #000;" onclick="showHidePartners('city_{$country}_{position()}')">г. <xsl:value-of select="current()"/></span></p>
                  </td>
               </tr>
               <tr>
                  <td style="padding-bottom: 5px;">
                     <table width="100%" cellspacing="0" cellpadding="5" style="display: none; border-top: 1px solid #ddd;" id="city_{$country}_{position()}">
                        <xsl:variable name="dealer_xml">
                           <xsl:for-each select="//item[item_propertys/item_property[@xml_name='city']/value = current()]">
                              <xsl:call-template name="create_dealer_xml"/>
                           </xsl:for-each>
                        </xsl:variable>
                        
                        <xsl:for-each select="exsl:node-set($dealer_xml)/dealer">
                           <xsl:sort select="name" order="ascending"/>
                           
                           <tr>
                              <td colspan="3" style="padding-top: 15px;">
                                 <div style="font-size: 14pt; float: left;"><a href="{path}" style="color: #0097e2; font-family: Georgia;"><xsl:value-of disable-output-escaping="yes" select="name"/></a></div>
                              </td>
                           </tr>
                           <tr>
                              <td width="30px"></td>
                              <td width="250" style="white-space: nowrap; padding-bottom: 10px;">
                                 <xsl:if test="telephone != ''">
                                    Тел: <xsl:value-of disable-output-escaping="yes" select="telephone"/><br/>
                                 </xsl:if>
                                 
                                 <xsl:if test="fax != ''">                           
                                    Факс: <xsl:value-of disable-output-escaping="yes" select="fax"/>                  
                                 </xsl:if>
                              </td>
                              <td style="padding-bottom: 10px; white-space: nowrap;">
                                 <xsl:if test="site != ''">
                                    Сайт: <a href="{site}" style="color: #0097e2;" target="_blank"><xsl:value-of disable-output-escaping="yes" select="site"/></a><br/>
                                 </xsl:if>
                              
                                 <xsl:if test="email != ''">
                                    E-mail: <a href="mailto:{email}" style="color: #0097e2;" target="_blank"><xsl:value-of disable-output-escaping="yes" select="email"/></a>
                                 </xsl:if>                     
                              </td>
                           </tr>
                        </xsl:for-each>
            
                     </table>
                     
                  </td>
               </tr>            
            </xsl:for-each>
         </table>
      </xsl:for-each>


      <p align="center">
         <!-- Строка ссылок на другие страницы архива информационного блока -->
         <xsl:if test="ОтображатьСсылкиНаСледующиеСтраницы=1">
            <xsl:if test="blocks/items/count_items &gt; blocks/items/items_on_page">
               <xsl:call-template name="for">
                  <xsl:with-param name="n" select="blocks/items/count_items div blocks/items/items_on_page"/>
                  <xsl:with-param name="current_page" select="blocks/items/current_page"/>
               </xsl:call-template>
            </xsl:if>
         </xsl:if>
      </p>
   </xsl:template>

   <xsl:template match="blocks/groups/group">
      <td>
         <a href="{group_path}/">
            <xsl:value-of disable-output-escaping="yes" select="group_name"/>
         </a>
      </td>
   </xsl:template>
   
   <!-- Шаблон построения XML-дилеров -->
   <xsl:template name="create_dealer_xml">
      <dealer>
         <name><xsl:value-of select="item_name"/></name>      
         <path><xsl:value-of select="item_path"/></path>      
         <telephone><xsl:value-of select="item_propertys/item_property[@xml_name = 'telephone']/value"/></telephone>      
         <fax><xsl:value-of select="item_propertys/item_property[@xml_name = 'fax']/value"/></fax>      
         <email><xsl:value-of select="item_propertys/item_property[@xml_name = 'email']/value"/></email>      
         <site><xsl:value-of select="item_propertys/item_property[@xml_name = 'site']/value"/></site>
      </dealer>
   </xsl:template>

   <!-- Цикл для вывода строк ссылок -->
   <xsl:template name="for">
      <xsl:param name="i" select="0"/>
      <xsl:param name="n"/>
      <xsl:param name="current_page"/>

      <xsl:if test="$n &gt; $i">

         <!-- Ставим ссылку на страницу-->
         <xsl:if test="$i != $current_page">
            <a href="?page={$i}">
               <xsl:value-of select="$i+1"/>
            </a>
         </xsl:if>

         <!-- Не ставим ссылку на страницу-->
         <xsl:if test="$i = $current_page">
            <xsl:value-of select="$i+1"/>
         </xsl:if>&#xA0;

         <!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
         <xsl:call-template name="for">
            <xsl:with-param name="i" select="$i + 1"/>
            <xsl:with-param name="n" select="$n"/>
            <xsl:with-param name="current_page" select="$current_page"/>
         </xsl:call-template>
      </xsl:if>
   </xsl:template>
</xsl:stylesheet>


Здесь немного усложнено по ряду причин, в общем случае можно сделать проще.

compaq писал(а):
Развертывание очень интересует

Да там вообще примитивный JavaScript, что именно не понятно в реализации?
#
Re: Вопрос реализации функционала по вашему разделу "Cписок дилеров"
получилось сделать как у вас - теперь на первый взгляд ясненько как организована данная сортировка и отображение 8)

c js теперь понятно - я не понимал изначально как все устроено и запутался,думал тут с подгрузкой какой-нибудь и тд а оказалось что js действительно имеет малую роль здесь - только скрытие блока.

В сортировке дело - буду разбирать сидеть что к чему для дальнейшего развития приведенный вами шаблон - спасибо вам большое!
ку
Модератор
#
Re: Вопрос реализации функционала по вашему разделу "Cписок дилеров"
compaq,
Пожалуйста.
#
Re: Вопрос реализации функционала по вашему разделу "Cписок дилеров"
единственное я не смог вставить в данный шаблон доп. cв-во типа файл а именно картинка
Грубо говоря берем опять же пример шаблона приведенный но нужно еще лого отобразить дилера

<xsl:value-of disable-output-escaping="yes" select="telephone"/>
таким образом выводим свойство строка

тип файл а именно картинка будет выводиться

<img src="/{item_propertys/item_property[@xml_name='logo']/property_file_path}" />
?

и как это применить в конструкции
<xsl:if test="telephone != ''">
                                   ?
                                 </xsl:if>



и в шаблоне дилера непонимаю что вбивать ну то есть
<logo>?</logo>

обьясните если не трудно.. все перепробывал и запутался!
ку
#
Re: Вопрос реализации функционала по вашему разделу "Cписок дилеров"
три дня сижу и так не дошло до меня как в этот шаблон добавить свойство типа файл

это именно та ситуация когда уже не взять сил для данного решения

именно типа файл.
ку
Модератор
#
Re: Вопрос реализации функционала по вашему разделу "Cписок дилеров"
compaq,
уже двести раз сказано, сразу показывайте XML и XSL, как Вы думаете я угадаю что там у Вас написано и что нужно исправить?
#
Re: Вопрос реализации функционала по вашему разделу "Cписок дилеров"
я понимаю вас! я брал пример который дали выше поэтому думаю смысл мне сюда кидать тоже самое что есть у вас? 8)

я вижу здесь - шаблон построения
<!-- Шаблон построения XML-дилеров -->
   <xsl:template name="create_dealer_xml">
      <dealer>
         <name><xsl:value-of select="item_name"/></name>      
         <path><xsl:value-of select="item_path"/></path>      
         <telephone><xsl:value-of select="item_propertys/item_property[@xml_name = 'telephone']/value"/></telephone>      
         <fax><xsl:value-of select="item_propertys/item_property[@xml_name = 'fax']/value"/></fax>      
         <email><xsl:value-of select="item_propertys/item_property[@xml_name = 'email']/value"/></email>      
         <site><xsl:value-of select="item_propertys/item_property[@xml_name = 'site']/value"/></site>
      </dealer>
   </xsl:template>



+

<xsl:for-each select="exsl:node-set($dealer_xml)/dealer">
                           <xsl:sort select="name" order="ascending"/>
                          
                           <tr>
                              <td colspan="3" style="padding-top: 15px;">
                                 <div style="font-size: 14pt; float: left;"><a href="{path}" style="color: #0097e2; font-family: Georgia;"><xsl:value-of disable-output-escaping="yes" select="name"/></a></div>
                              </td>
                           </tr>
                           <tr>
                              <td width="30px"></td>
                              <td width="250" style="white-space: nowrap; padding-bottom: 10px;">
                                 <xsl:if test="telephone != ''">
                                    Тел: <xsl:value-of disable-output-escaping="yes" select="telephone"/><br/>
                                 </xsl:if>
                                
                                 <xsl:if test="fax != ''">                          
                                    Факс: <xsl:value-of disable-output-escaping="yes" select="fax"/>                  
                                 </xsl:if>
                              </td>
                              <td style="padding-bottom: 10px; white-space: nowrap;">
                                 <xsl:if test="site != ''">
                                    Сайт: <a href="{site}" style="color: #0097e2;" target="_blank"><xsl:value-of disable-output-escaping="yes" select="site"/></a><br/>
                                 </xsl:if>
                              
                                 <xsl:if test="email != ''">
                                    E-mail: <a href="mailto:{email}" style="color: #0097e2;" target="_blank"><xsl:value-of disable-output-escaping="yes" select="email"/></a>
                                 </xsl:if>                    
                              </td>
                           </tr>
                        </xsl:for-each>


какие изменения надо внести в эти два куска -  вставить помимо свойст типа строка  - свойство типа файл а именно картинка

спасибо..
ку
Модератор
#
Re: Вопрос реализации функционала по вашему разделу "Cписок дилеров"
Где-то так:
<file1><xsl:value-of select="item_propertys/item_property[@xml_name = 'logo']/property_file_path"/></file1>

...
<xsl:if test="file1 != ''">
Каритинка1: <img src="/{file1}" />
</xsl:if>


Т.е. в первом случае мы на XSL строим XML, а потом его там же в другом месте обрабатываем. Я понимаю, в этом примере не все просто, но если внимательно посмотреть, то можно разобраться.
#
Re: Вопрос реализации функционала по вашему разделу "Cписок дилеров"
HostCMS блин спасибо! да невнимателен 8)

надо было всего лишь применить тег file1 в адресе выводимого файла,теперь вроде ясненько как устроен вызов.
а я еще раз пытался выводить свойство а не применить имеющийся тег.

ку
Авторизация