Вывод всех опросов одним вызовом — различия между версиями
Kirill (обсуждение | вклад) |
Kirill (обсуждение | вклад) |
||
Строка 18: | Строка 18: | ||
В шаблоне, где необходимо выводить все активные опросы, надо добавить следующий вызов: | В шаблоне, где необходимо выводить все активные опросы, надо добавить следующий вызов: | ||
<source lang="xml"> | <source lang="xml"> | ||
− | <xsl:apply-templates select="document('usel:// | + | <xsl:apply-templates select="document('usel://votetest/')//item" disable-output-escaping="yes" mode="votetest"/> |
</source> | </source> | ||
Теперь мы знаем id всех объектов "Опрос". Они будут в результирующем xml-ответе. Остаётся только обработать эту выборку: | Теперь мы знаем id всех объектов "Опрос". Они будут в результирующем xml-ответе. Остаётся только обработать эту выборку: | ||
Строка 25: | Строка 25: | ||
<xsl:template match="item" mode="votetest"> | <xsl:template match="item" mode="votetest"> | ||
<!-- <xsl:value-of select="@id"/> <br/> --> | <!-- <xsl:value-of select="@id"/> <br/> --> | ||
− | <xsl:variable name=" | + | <xsl:variable name="vote_id" select="@id" /> |
<!-- <xsl:value-of select="$vote_id"/> <br/> --> | <!-- <xsl:value-of select="$vote_id"/> <br/> --> | ||
<b><xsl:apply-templates select="document(concat('uobject://', $vote_id))/udata" /></b> | <b><xsl:apply-templates select="document(concat('uobject://', $vote_id))/udata" /></b> |
Версия 09:57, 25 февраля 2011
Стандартные макросы предполагают вывод опросов только по заданым параметра - либо указанный опрос, либо последний опрос. Это не всегда бывает удобно, так как объщее число опросов может меняться, а добавлять вручную в шаблоны вывод новых опросов неудобно.
Процесс вывода можно немного автоматизировать:
Для начала необходимо получить все возможные опросы. Сделать это можно простым 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/>
Начиная с версиt 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/> -->
<b><xsl:apply-templates select="document(concat('uobject://', $vote_id))/udata" /></b>
</xsl:template>
Здесь мы поочерёдно применяем ко всем опросам шаблон вывода (выделеный курсивом). Остаётся только оформить необходимым Вам образом сами опросы. Посмотреть пример шаблонов опросов Вы можете на локалпаке, если установите демо-дизайн интернет-магазина "Современный".