Контроллер поиска представляет проиндексированные страницы в тегах search_page, каждый из которых может содержать дочерний элемент, тег которого зависит от типа проиндексированного контента.
Стандартная структура 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"
xmlns:hostcms="https://www.hostcms.ru/"
exclude-result-prefixes="hostcms">
<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="/">
<xsl:apply-templates select="/site"/>
</xsl:template>
<xsl:template match="/site">
<h1>Поиск</h1>
<!-- Форма поиска -->
<form method="get" action="/search/" class="search">
<input id="search" type="text" size="50" name="text" value="{query}" maxlength="200" class="input_buttom_search"/><xsl:text> </xsl:text>
<input type="submit" class="button" value="Искать"/>
</form>
<xsl:if test="query!=''">
<p>
<strong>Найдено <xsl:value-of select="total"/><xsl:text> </xsl:text><xsl:call-template name="declension">
<xsl:with-param name="number" select="total"/></xsl:call-template></strong>.</p>
<xsl:if test="total!=0">
<ol start="{(page) * limit + 1}" class="search">
<xsl:apply-templates select="search_page"></xsl:apply-templates>
</ol>
</xsl:if>
</xsl:if>
<xsl:if test="query = ''">
<p>Введите поисковой запрос.</p>
</xsl:if>
</xsl:template>
<xsl:template match="search_page">
<li>
<a href="{url}">
<xsl:value-of select="title"/>
</a>
<br/>
<span class="description"><xsl:apply-templates select="url"/><xsl:text> · </xsl:text><xsl:value-of select="round(size div 1024)"/><xsl:text> Кб · </xsl:text><xsl:value-of select="date"/></span>
</li>
</xsl:template>
<xsl:template name="url" match="text()">
...
</xsl:template>
<!-- Цикл для вывода строк ссылок -->
<xsl:template name="for">
...
</xsl:template>
<!-- Склонение после числительных -->
<xsl:template name="declension">
...
</xsl:template>
</xsl:stylesheet>
Дочерний тег, расположенный внутри search_page, зависит от типа проиндексированного контента и может иметь имя structure, informationsystem_item, informationsystem_group, shop_item, shop_group и т.д.
Предположим нам необходимо вывести подробную информацию о проиндексированном товаре, для этого вначале необходимо проверить на наличие дочернего тега с определенным именем и далее вывести информацию, за основу можно взять фрагмент XSL-шаблона вывода информации о товаре.
<xsl:template match="search_page">
<li>
<a href="{url}">
<xsl:value-of select="title"/>
</a>
<br/>
<span class="description"><xsl:apply-templates select="url"/><xsl:text> · </xsl:text><xsl:value-of select="round(size div 1024)"/><xsl:text> Кб · </xsl:text><xsl:value-of select="date"/></span>
<!-- Если проиндексирован товар -->
<xsl:if test="shop_item/node()">
<xsl:apply-templates select="shop_item"></xsl:apply-templates>
</xsl:if>
</li>
</xsl:template>
<!-- Формат вывода чисел -->
<xsl:decimal-format name="my" decimal-separator="," grouping-separator=" "/>
<!-- Шаблон вывода дополнительной информации о товаре -->
<xsl:template match="shop_item">
<p><a href="{dir}{image_large}" target="_blank"><img src="{dir}{image_small}" /></a></p>
<!-- Цена товара -->
<xsl:if test="price != 0">
<div class="price">
<xsl:value-of select="format-number(price, '### ##0,00', 'my')"/><xsl:text> </xsl:text><xsl:value-of select="currency"/><xsl:text> </xsl:text>
<!-- Если цена со скидкой - выводим ее -->
<xsl:if test="discount != 0">
<span class="oldPrice">
<xsl:value-of select="format-number(price + discount, '### ##0,00', 'my')"/><xsl:text> </xsl:text><xsl:value-of select="currency" />
</span><xsl:text> </xsl:text>
</xsl:if>
<!-- Ссылку на добавление в корзины выводим, если:
type = 0 - простой тип товара
type = 1 - электронный товар, при этом остаток на складе больше 0 или -1,
что означает неограниченное количество -->
<xsl:if test="type = 0 or (type = 1 and (digitals > 0 or digitals = -1)) or type = 2">
<a href="{/shop/url}cart/?add={@id}" onclick="return $.addIntoCart('{/shop/url}cart/', {@id}, 1)">
<img src="/images/add_to_cart.gif" alt="Добавить в корзину" title="Добавить в корзину" />
</a>
</xsl:if>
</div>
</xsl:if>
</xsl:template>