XSLT шаблоны для всех типов баннеров
Материал из Umicms
Версия от 10:39, 20 января 2016; Alexei (обсуждение | вклад)
Актуально для версии 2.9.6
Задача: Добавить шаблоны вывода баннеров всех типов: с картинкой, флэшкой и HTML.
Реализация:
В директории с XSLT-шаблонами (папка ./xsltTpls или ./templates/имя_шаблона/xslt при новом формате хранения шаблонов) создадим новый файл banners.xsl и добавим в него следующее содержимое:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:udt="http://umi-cms.ru/2007/UData/templates"
xmlns:umi="http://www.umi-cms.ru/TR/umi"
xmlns:xlink="http://www.w3.org/1999/xlink"
exclude-result-prefixes="xsl date udt xlink">
<xsl:template match="udata[@module = 'banners'][@method = 'fastInsert']" />
<xsl:template match="udata[@module = 'banners'][@method = 'fastInsert'][banner]">
<div class="gray_block">
<xsl:apply-templates select="banner" />
</div>
</xsl:template>
<xsl:template match="udata[@module = 'banners'][@method = 'fastInsert']">
<xsl:apply-templates select="banner" />
</xsl:template>
<xsl:template match="banner" />
<xsl:template match="banner[@type = 'image']">
<xsl:choose>
<xsl:when test="href">
<a href="/banners/go_to/{/udata/@id}/">
<xsl:if test="@target">
<xsl:attribute name="target">
<xsl:value-of select="@target" />
</xsl:attribute>
</xsl:if>
<img src="{source}" width="{@width}" height="{@height}" alt="{alt}" border="0" />
</a>
</xsl:when>
<xsl:otherwise>
<img src="{source}" width="{@width}" height="{@height}" alt="{alt}" border="0" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="banner[@type = 'swf']">
<object width="{@width}" height="{@height}" align="middle"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0"
classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="{source}" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="wmode" value="opaque" />
<xsl:if test="href">
<param name="flashVars">
<xsl:attribute name="value">
<xsl:text>url=/banners/go_to/</xsl:text><xsl:value-of select="/udata/@id" /><xsl:text>/</xsl:text>
<xsl:if test="@target">
<xsl:text>&target=</xsl:text><xsl:value-of select="@target" />
</xsl:if>
</xsl:attribute>
</param>
</xsl:if>
<embed width="{@width}" height="{@height}" align="middle" wmode="opaque"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" allowscriptaccess="sameDomain"
name="banner" bgcolor="#ffffff" quality="high" src="{source}">
<xsl:if test="href">
<xsl:attribute name="flashVars">
<xsl:text>url=/banners/go_to/</xsl:text><xsl:value-of select="/udata/@id" /><xsl:text>/</xsl:text>
<xsl:if test="@target">
<xsl:text>&target=</xsl:text><xsl:value-of select="@target" />
</xsl:if>
</xsl:attribute>
</xsl:if>
</embed>
</object>
</xsl:template>
<xsl:template match="banner[@type = 'html']">
<xsl:value-of select="source" disable-output-escaping="yes" />
</xsl:template>
</xsl:stylesheet>
В основном файле шаблона (название файла можно посмотреть в настройках модуля "Структура") добавим строку подключения созданного файла banners.xsl:
<xsl:include href="banners.xsl" />
Данные шаблоны обрабатывают результаты работы макроса banners fastInsert(). Пример вызова данного макроса приведен ниже:
<xsl:apply-templates select="document('udata://banners/fastInsert/(идентификатор_рекламного_места)')/udata/banner"/>