Решение проблемы длинных url ввыдаче модуля поиска

#
Решение проблемы длинных url ввыдаче модуля поиска
Очень часто при использовании поиска по сайту на выдаче формируется список, содержащий ссылки на найденные страницы, а также полные пути к этим страницам. Как правило строки, содержащие эти пути имеют большую длину, что осложняет просмотр всего списка. Есть возможность модифицировать xsl-шаблон "Поиск" таким образом, что если длина строки с полным адресом превышает, например, 50 символов, то из начальной последовательности символов и конечной последовательности символов этой строки, а также символа "..." будет формироваться новая. Именно эта строка будет отображаться в выдаче. Внесенные изменения в xsl-шаблон "Поиск" выделены жирным шрифтом.

<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="/">
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match="/document">

   <!-- Форма поиска -->
   <form method="get" action="/search/" style="margin-top: 10px;">
      <input type="text" size="50" name="text" value="{search_query}" maxlength="200" class="input_buttom_search"/>
        <input type="submit" class="input_buttom_search_button" value="Искать"/>
   </form>


<xsl:if test="search_query!=''">
   <p><strong>Всего найдено: <xsl:value-of select="count_items"/></strong></p>

   <xsl:if test="count_items!=0">
      <ol start="{(current_page - 1) * items_on_page + 1}">
         <xsl:apply-templates select="item">
         </xsl:apply-templates>
      </ol>
   
      <!-- Строка ссылок на другие страницы результата поиска -->
      <center>
      <xsl:call-template name="for">
         <xsl:with-param name="n" select="count_items div items_on_page"/>
         <xsl:with-param name="current_page" select="current_page - 1"/>
      </xsl:call-template>
      </center>
   </xsl:if>
</xsl:if>

<xsl:if test="search_query = ''">
<p>Введите поисковой запрос.</p>
</xsl:if>

</xsl:template>

<xsl:template name="page_address" match="text()">
   <xsl:param name="str" select="." />
   
   <xsl:param name="max">50</xsl:param>
   <xsl:param name="hvost">10</xsl:param>
   
   <xsl:param name="begin"><xsl:choose>
      <xsl:when test="string-length($str) > $max">
         <xsl:value-of select="substring($str, 1, $max - $hvost)" />
      </xsl:when>
         
      <xsl:otherwise>
         <xsl:value-of select="substring($str, 1)" />
      </xsl:otherwise>
   </xsl:choose></xsl:param>
   
   <xsl:param name="end"><xsl:choose>
      <xsl:when test="string-length($str) > $max">
         <xsl:value-of select="substring($str, string-length($str) - $hvost + 1, $hvost)" />
      </xsl:when>
   
      <xsl:otherwise>
         
      </xsl:otherwise>
   </xsl:choose></xsl:param>
   
   
   <xsl:param name="result"><xsl:choose>
      <xsl:when test="$end != ''">
          <xsl:value-of select="concat($begin, '…', $end)"/>
       </xsl:when>
       <xsl:otherwise>
          <xsl:value-of select="$begin"/>
       </xsl:otherwise>
   </xsl:choose></xsl:param>
   
   <xsl:value-of disable-output-escaping="yes" select="$result"/>
</xsl:template>

<xsl:template match="item">
   <li>
      <a href="{page_address}" class="small_link"><xsl:value-of select="page_name"/></a>
      <br/>
      
      <xsl:apply-templates select="page_address" />
       ·  <xsl:value-of select="page_size"/> Кб · <xsl:value-of select="page_date"/>
   </li>
</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 > 1">
   
      <xsl:if test="$n > $i">
         <!-- Разделитель ссылок -->
         <xsl:if test="$i != 0 and $n > $current_page"> - </xsl:if>
   
         <!-- Ставим ссылку на страницу-->
         <xsl:if test="$i != $current_page">
            <!-- Определяем адрес ссылки -->
            <xsl:variable name="number_link"><xsl:choose>
               <!-- Если не нулевой уровень -->
               <xsl:when test="$i != 0">&page=<xsl:value-of select="$i+1"/></xsl:when>
               <!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
               <xsl:otherwise></xsl:otherwise>
            </xsl:choose></xsl:variable>
   
            <a href="./?text={search_query_url}{$number_link}" class="small_link"><xsl:value-of select="$i+1"/></a>
         </xsl:if>
         
         <!-- Не ставим ссылку на страницу-->
         <xsl:if test="$i = $current_page">
            <span class="current"><xsl:value-of select="$i+1"/></span>
         </xsl:if>   
   
         <!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
         <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:if>
</xsl:template>

</xsl:stylesheet>
Авторизация