Помогите, как вывести на страницу select со всеми товарами.
Создал файл шаблона:
<xsl:template name="left-selector-items">
<noindex>
<form action="" method="get">
<select>
<option>тест</option>
</select>
</form>
</noindex>
</xsl:template>
</xsl:stylesheet>
Подключил в нужном месте - показывает, а как быть дальше? понятно что через макрос getObjectsList, но как?
Помогите, очень надо, новичок в xsl
<xsl:template name="left-selector-items">
<noindex>
<form action="" method="get">
<select>
<xsl:apply-templates select="document('udata://catalog/getObjectsList')//item" mode="select_option" />
</select>
</form>
</noindex>
</xsl:template>
<xsl:template match="udata[@method = 'getObjectsList']" mode="select_option">
<option>{item}</option>
</xsl:template>
схема ваших действий. А более детально разберите на примере сайта демодизи , вывод getObjectsList. Вам нужно его вывести по тому же принципу только без лишней информации, и вывадить не в див а в option.
не выводит option :(
<xsl:template match="udata[@method = 'getObjectsList']" name="left-selector-items">
<noindex>
<form action="" method="get">
<select umi:element-id="{category_id}" umi:module="catalog" umi:method="getObjectsList" umi:sortable="sortable">
<xsl:apply-templates select="lines/item" mode="select_option" />
</select>
</form>
</noindex>
</xsl:template>
<xsl:template match="udata[@method = 'getObjectsList']//item" mode="select_option">
<option umi:element-id="{@id}" umi:region="row">{item}</option>
</xsl:template>
в вашем шаблоне:
<xsl:template match="udata[@method = 'getObjectsList']//item" mode="select_option">
<option umi:element-id="{@id}" umi:region="row">{item}</option>
</xsl:template>
вы пытаетесь вывести что-то строчкой {item}, я так понимаю, тут должно быть название товара.
Вы сделали как минимум 2 ошибки:
- Во-первых, фигурные скобки используются только тогда, когда вам надо вывести значение в атрибут какого-то тега (например ссылку в атрибут href тега a : <a href="{@link}">ссылка</a>), а при выводе значение в остальных местах используется <xsl:value-of /> или схожие конструкции.
- Во-вторых, вы пытаетесь вывести item в шаблоне, который уже обрабатывает item (match="udata[@method = 'getObjectsList']//item"). То есть, система будет искать в xml, который вы обрабатываете, узел по xpath = udata[@method = 'getObjectsList']//item/item, а такого узла макрос getObjectsList (http://help-dev.umi-cms.ru/catalog.getObjectsList.html#xsltDesc) не возвращает. Так как, вам надо вывести текст в данном узле и вы его уже обрабатываете, используйте точку (.) или xpath функцию text()
В итоге у ваш неправильный шаблон приведенный мною выше, станет таким:
<xsl:template match="udata[@method = 'getObjectsList']//item" mode="select_option">
<option umi:element-id="{@id}" umi:region="row"><xsl:value-of select="text()" /></option>
</xsl:template>
в xml нет items, но выявилось другое. в подкатегориях каталога список объектов принимает вид селектора и он с option. почему так?
вот текущий код:
вызов макроса
<xsl:apply-templates select="document('udata://catalog/getObjectsList/left-selector-items')/udata"/>
шаблоны
<xsl:template match="udata[@method = 'getObjectsList']" name="left-selector-items">
<noindex>
<form action="" method="get">
<select umi:element-id="{category_id}" umi:module="catalog" umi:method="getObjectsList" umi:sortable="sortable">
<xsl:apply-templates select="lines/item" mode="select_option" />
</select>
</form>
</noindex>
</xsl:template>
<xsl:template match="udata[@method = 'getObjectsList']//item" mode="select_option">
<option umi:element-id="{@id}" umi:region="row"><xsl:value-of select="text()" /></option>
</xsl:template>