Вывод всех опросов одним вызовом

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

Стандартные макросы предполагают вывод опросов только по заданным параметрам - либо указанный опрос, либо последний опрос. Это не всегда бывает удобно, так как объщее число опросов может меняться, а добавлять вручную в шаблоны вывод новые опросы неудобно.

Процесс вывода можно немного автоматизировать:

Для начала необходимо получить все возможные опросы. Сделать это можно простым usel-запросом. Его описание Вы можете найти здесь http://help-dev.umi-cms.ru/chapter.XSLTTemplates.usel.html. Создадим файл с usel-запросом и названием votetest.xsl:

 <?xml version="1.0" encoding="utf-8"?><br/>
 <selection><br/>
 <target expected-result="objects"><br/>
 <type id="ИД_объекта_опрос" /> <br/>
 </target><br/>
 </selection><br/>

Начиная с версие 2.8.3 идентификатор может отличаться. Для версии более ранней этот id=40.

В шаблоне, где необходимо выводить все активные опросы, надо добавить следующий вызов:

<xsl:apply-templates select="document('usel://votetest/')//item" disable-output-escaping="yes" mode="votetest"/>

Теперь мы знаем id всех объектов "Опрос". Они будут в результирующем xml-ответе. Остаётся только обработать эту выборку:

<xsl:template match="item" mode="votetest">
		<!-- <xsl:value-of select="@id"/> <br/> -->
		<xsl:variable name="vote_id" select="@id" />
		<!-- <xsl:value-of select="$vote_id"/> <br/> -->
		<xsl:apply-templates select="document(concat('uobject://',  $vote_id))/udata" />
</xsl:template>

Здесь мы поочерёдно применяем ко всем опросам шаблон вывода (выделеный курсивом). Остаётся только оформить необходимым Вам образом сами опросы. Посмотреть пример шаблонов опросов Вы можете на локалпаке, если установите демо-дизайн интернет-магазина "Современный".