Ну я бы предположил, что бессмысленно сортировать udata - он один :-)
apply-templates - означает буквально "применить шаблон к какому-то тегу". sort - говорит о том, что сотрировать нужно тот тег, к которому применяется шаблон. Выберите что вы хотите сортировать и это сортируйте. Но для этого и делайте apply-templates
Огромное спасибо за пояснение, наконец-то мы победили сортировку!!! Даже немного обидно, когда решение такой длительной проблемы занимает две строчки!
Вот так заработало:
<xsl:if test="$sort='price'">
<xsl:apply-templates select="item" mode="catalog_item">
<xsl:sort order="ascending" select="document(concat('upage://',@id))//property[@name = 'price']/value" data-type="number"/>
</xsl:apply-templates>
Но вы будете смеяться... у меня ещё один ступор возник здесь же. Воодушевившись сразу начал клеить фильтр в зависимости от параметра. А именно в index.xsl, создал переменную <xsl:param name="sort" select="id"/> .... если верить документации таким образом переменной сразу задаётся значение же? Но у меня, когда я проверяю случай, что переменная sort не задана пользователем..... ничего не происходит, переменной этой будто не существует, значений нет. Но если переменная задана пользователем(/?sort=price), тогда всё работает... странно, опять что-то не так делаю?
(
Попробовал отловить её в переменную другую и если пусто выводить ноль, но тоже не отловилось значение...
<xsl:variable name="filparam" select="$sort"/>
<xsl:if test="$filparam=''"> <xsl:variable name="filparam" select="0"/> </xsl:if>
<xsl:value-of select="$filparam"/>
Возникла пока идея может через кастом получится отловить переменную.. но терзают сомнения, ведь в документалке то без кастома просто получали... )))