r2d2, рассмотрите внимательно структуру XSL-документа. Она в общих чертах такая:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:decimal-format name="my" decimal-separator="," grouping-separator=" "/>
<xsl:template match="/">
<xsl:apply-templates select="/shop"/>
</xsl:template>
<!-- Шаблон для магазина -->
<xsl:template match="/shop">
тут чего-то много написано - выводится название группы, фильтры и прочая лабуда
<xsl:apply-templates select="item" />
тут тоже чего-то понаписано - про вывод пагинации в том числе...
</xsl:template>
Тут много разных <xsl:template match=""> ... </xsl:template>
<!-- Шаблон для товара -->
<xsl:template match="item">
а здесь формируется вывод собственно товара
</xsl:template>
Тут тоже много разных <xsl:template match=""> ... </xsl:template>
</xsl:stylesheet>
Строго говоря, корневой темплейт это <xsl:template match="/">, потому что он соответствует единственному в XML-документе корневому узлу "/".
Но я данном случае я подразумевал под корневым следующий темплейт - <xsl:template match="/shop">
Потому что первый темплейт не содержит никаких действий кроме вызова темплейта shop, и в данном случае фрагмент
<xsl:template match="/">
<xsl:apply-templates select="/shop"/>
</xsl:template>
вообще можно удалить из шаблона, от этого ничего не изменится.
Так вот, ваша задача - во1х, скопировать темплейт item и задать для копии какой-нибудь mode. Получится так:
<!-- Шаблон для товара -->
<xsl:template match="item">
а здесь будет вывод списка остальных товаров группы
</xsl:template>
<!-- Шаблон для товара -->
<xsl:template match="item" mode="mymode">
а здесь будет вывод карточки товара
</xsl:template>
Ну и теперь вам останется найти в корневом темплейте (а мы договорились, что корневым мы считаем темплейт shop) то место, откуда у нас вызывается темплейт item. Вызывается он вот этой строкой
<xsl:apply-templates select="item" />
Эту строку мы дублируем, вписываем в вызов условие и в нужном случае добавляем mode.
Например, из ТДС мы передаем id текущего товара как элемент массива external_propertys с индексом this_item_id:
$external_propertys['this_item_id'] = $item_id;
Тогда в XML-документе в узле /shop у нас появится дочерний узел с названием this_item_id, и XPath-путь к нему будет /shop/this_item_id а значит мы сможем в корневом темплейте прописать следующие два вызова с условиями:
<!--Покажем карточку текущего товара-->
<xsl:apply-templates select="item[@id = /shop/this_item_id]" mode="mymode" />
<!--Покажем остальные товары-->
<xsl:apply-templates select="item[@id != /shop/this_item_id]" />
В итоге у нас получится шаблон такой структуры:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:decimal-format name="my" decimal-separator="," grouping-separator=" "/>
<!-- Шаблон для магазина -->
<xsl:template match="/shop">
тут чего-то много написано - выводится название группы, фильтры и прочая лабуда
то что лишнее можно будет просто удалить
<!--Покажем карточку текущего товара-->
<xsl:apply-templates select="item[@id = /shop/this_item_id]" mode="mymode"/>
<!--Покажем остальные товары-->
<xsl:apply-templates select="item[@id != /shop/this_item_id]"/>
тут тоже чего-то понаписано - про вывод пагинации в том числе...
тут тоже можно удалять все что лишнее
</xsl:template>
Тут много разных
<xsl:template match="...">
</xsl:template>
<!-- Шаблон для товара -->
<xsl:template match="item">
а здесь будет вывод списка остальных товаров группы
</xsl:template>
<!-- Шаблон для товара -->
<xsl:template match="item" mode="mymode">
а здесь будет вывод карточки товара
</xsl:template>
Тут тоже много разных
<xsl:template match="...">
</xsl:template>
</xsl:stylesheet>