Использование GET и POST параметров в XSLT-шаблонах

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 18.

В UMI.CMS предусмотрена возможность использования GET и POST параметров в XSLT-шаблонах. Для этого их необходимо инициализировать как глобальные параметры в шаблоне при помощи инструкции <xsl:param> (после инструкции <xsl:output>, на одном уровне c <xsl:template>).

В отличие от серверных переменных (см. Использование серверных переменных в XSLT-шаблонах) они инициализируются тем же именем, за исключением многомерных массивов, в которых символы "[" и "]" должны быть заменены на "." (точка).

Например, если создать следующий шаблон:

<?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" version="4.01" encoding="UTF-8" indent="yes"/>

 <xsl:param name="get_param1" /> 
 <xsl:param name="get_param2" /> 
 <xsl:param name="get_param3" /> 

 <xsl:param name="post_param1" select="10"/> 
 <xsl:param name="post_param2" select="11"/> 
 <xsl:param name="post_param3" select="12"/>

 <xsl:param name="data.new.price"/> 


 <!-- main template -->

 <xsl:template match="/">

  <html>

   <head></head>

   <body>
  
    <ul>
	<li>$get_param1: <xsl:value-of select="$get_param1" /></li>
	<li>$get_param2: <xsl:value-of select="$get_param2" /></li>
	<li>$get_param3: <xsl:value-of select="$get_param3" /></li>

	<li>$post_param1: <xsl:value-of select="$post_param1" /></li>
	<li>$post_param2: <xsl:value-of select="$post_param2" /></li>
	<li>$post_param3: <xsl:value-of select="$post_param3" /></li>

	<li>$data.new.price: <xsl:value-of select="$data.new.price" /></li>
    </ul>

    <form method="post" action="/about/">
	<input type="text" name="post_param1" value="21"/>
	<input type="text" name="post_param2" value="22"/>
	<input type="text" name="post_param3" value="23"/>
	<input type="submit" value="send"/>
    </form>	

  </body>
  
 </html>

 </xsl:template>

</xsl:stylesheet>

И назначить его для страниц сайта, то при запросе вида http://адрес_сайта/?get_param1=10&get_param2=11&get_param3=12&data[new][price]=1200 мы увидим следующее:

    * $get_param1: 10
    * $get_param2: 11
    * $get_param3: 12
    * $post_param1: 10
    * $post_param2: 11
    * $post_param3: 12
    * $data.new.price: 1200

   ... здесь будет форма ...

Обратите внимание, что в шаблон не было передано POST параметров, однако мы указали им значение по умолчанию, которое и вывелось в итоге.

Если теперь отправить форму, то произойдет переход на страницу http://адрес_сайта/about/ (допустим она тоже выводится по этому же шаблону), и в браузере мы увидим уже следующее:

    * $get_param1:
    * $get_param2:
    * $get_param3:
    * $post_param1: 21
    * $post_param2: 22
    * $post_param3: 23
    * $data.new.price:

   ... здесь будет форма ...

Как можно видеть в этом случае POST параметры получили переданные из формы значения, и они выводятся вместо значений по умолчанию. Остальные параметры не были приняты, поэтому получили пустое значение (определенное по умолчанию).