XSLT шаблоны для всех типов баннеров — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «Создаем расположение в шаблоне Баннер слева, banner_left. Создаем баннер с картинкой в панели у…»)
 
 
(не показаны 3 промежуточные версии 1 участника)
Строка 1: Строка 1:
Создаем расположение в шаблоне Баннер слева, banner_left.
+
[[Категория: Верстка в XSLT]][[Категория: Модуль Баннеры]]
Создаем баннер с картинкой в панели управления UMI.CMS, Модуль Баннеры. И назначаем ему расположение в шаблоне: banner_left.
+
'''Актуально для версии 2.9.6'''<br/><br/>
 +
'''Задача:''' Добавить шаблоны вывода баннеров всех типов: с картинкой, флэшкой и HTML.<br/><br/>
 +
'''Реализация:'''
  
Создаем шаблон для вывода кода баннера banners.xsl в папке /xsltTpls/imports/
+
В директории с XSLT-шаблонами (папка '''./xsltTpls''' или '''./templates/имя_шаблона/xslt''' при новом формате хранения шаблонов) создадим новый файл banners.xsl и добавим в него следующее содержимое:
 +
<source lang="xml">
 +
<?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']" />
  
<source lang="xml">
+
<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>
  
<?xml version="1.0" encoding="UTF-8"?>
+
<xsl:template match="banner" />
<!DOCTYPE xsl:stylesheet  [
 
<!ENTITY nbsp "&#160;">
 
<!ENTITY middot "&#183;">
 
<!ENTITY copy "&#169;">
 
]>
 
  
<xsl:stylesheet version="1.0"
+
<xsl:template match="banner[@type = 'image']">
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+
<xsl:choose>
xmlns:php="http://php.net/xsl"
+
<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>
  
xmlns:udt="http://umi-cms.ru/2007/UData/templates"
+
<xsl:template match="banner[@type = 'swf']">
xmlns:umi="http://www.umi-cms.ru/TR/umi"
+
<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>&amp;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>&amp;target=</xsl:text><xsl:value-of select="@target" />
 +
</xsl:if>
 +
</xsl:attribute>
 +
</xsl:if>
 +
</embed>
 +
</object>
 +
</xsl:template>
  
extension-element-prefixes="php"
+
<xsl:template match="banner[@type = 'html']">
exclude-result-prefixes="xsl php udt">
+
<xsl:value-of select="source" disable-output-escaping="yes" />
 
+
</xsl:template>
  <xsl:template match="banner[@type='image']" >
 
  <xsl:variable name="banner-url" select="concat('/banners/go_to/', ../@id, '/')" />
 
  <div class="top_banner">
 
    <a href="{$banner-url}" title="{./alt}">
 
    <xsl:if test="./@target">
 
      <xsl:attribute name="target">
 
        <xsl:value-of select="./@target" />
 
      </xsl:attribute>
 
    </xsl:if>
 
    <img src="{./source}" alt="{./alt}" width="{./@width}" height="{./@height}" />
 
    </a>
 
  </div>
 
</xsl:template>
 
  
 
</xsl:stylesheet>
 
</xsl:stylesheet>
 
</source>
 
</source>
  
Добавляем импорт этого файла в шаблон страницы:
+
В основном файле шаблона (название файла можно посмотреть в настройках модуля "Структура") добавим строку подключения созданного файла banners.xsl:
 
<source lang="xml">
 
<source lang="xml">
<xsl:import href="imports/banners.xsl" />
+
<xsl:include href="banners.xsl" />
 
</source>
 
</source>
И в нужном месте выводим сам баннер:
+
 
 +
Данные шаблоны обрабатывают результаты работы макроса '''banners fastInsert()'''. Пример вызова данного макроса приведен ниже:
 
<source lang="xml">
 
<source lang="xml">
<xsl:apply-templates select="document('udata://banners/insert/banner_left/')/udata/banner" />
+
<xsl:apply-templates select="document('udata://banners/fastInsert/(идентификатор_рекламного_места)')/udata/banner"/>
 
</source>
 
</source>

Текущая версия на 10:39, 20 января 2016

Актуально для версии 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>&amp;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>&amp;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"/>