В итоге мы можем расположить все шаблоны относящиеся к поиску в отдельном файле, например ~/imports/search.xsl
, подключив его к основному шаблону разметки страниц при помощи <xsl:include>
.
В этом случае основной шаблон может выглядеть примерно следущим образом:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" />
<xsl:param name="search_string"/>
<xsl:include href="imports/paging.xsl"/>
<xsl:include href="imports/search.xsl"/>
<xsl:template match="/">
<html>
<head> ... </head>
<body>
<xsl:apply-templates select="document('udata://search/insert_form')/udata"/>
<div class="content">
<xsl:apply-templates select="result"/>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Тогда как все остальные шаблоны для поиска будут в файле search.xsl
:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="udata[@module = 'search'][@method = 'insert_form']">
<div class="search_form">
<form method="get" action="/search/search_do/">
<input type="text" name="search_string" value="{last_search_string}"/>
<input type="submit" value="Искать" />
</form>
</div>
</xsl:template>
<xsl:template match="result[@module = 'search'][@method = 'search_do']">
<xsl:variable name="search-results" select="document('udata://search/search_do/')/udata" />
<xsl:apply-templates select="$search-results"/>
<xsl:apply-templates select="document(concat('udata://system/numpages/',
$search-results/total, '/', $search-results/per_page, '/notemplate/p/3'))" mode="paging.numbers"/>
</xsl:template>
<xsl:template match="udata[@module = 'search'][@method = 'search_do'][not(items/item)]">
<div class="search_message">
<xsl:text>По запросу </xsl:text>
<span>«<xsl:value-of select="$search_string" />»</span>
<xsl:text> ничего не найдено.</xsl:text>
</div>
</xsl:template>
<xsl:template match="udata[@module = 'search'][@method = 'search_do'][items/item]">
<div class="search_message">
<xsl:text>Найдено страниц: </xsl:text>
<xsl:value-of select="total" />
</div>
<ul class="search_results">
<xsl:apply-templates select="items/item" mode="search.results"/>
</ul>
</xsl:template>
<xsl:template match="item" mode="search.results" >
<li>
<a href="{@link}">
<xsl:value-of select="@name"/>
</a>
<xsl:value-of select="." disable-output-escaping="yes"/>
</li>
</xsl:template>
</xsl:stylesheet>