Проблему решил так... может интересно будет кому

Задача стояла такая: сделать фильтр по производителям и по группам. Например можно зайти в группу "Мороженое" и в ней отфильтровать по производителю "производитель 1".
Изначально думали делать с помощью AJAX но потом передумали.
Схема такая:
в ТДС интернет-магазин определяю 2 переменные:
Цитата:
@$group_id = $_GET['group_id'];
@$producer_id = $_GET['producer_id'];
и добавляю их значения в xml
Цитата:
)->addEntity(
Core::factory('Core_Xml_Entity'

->name('category_id'

->value($group_id)
)->addEntity(
Core::factory('Core_Xml_Entity'

->name('producer_id'

->value($producer_id)
);
в контроллере магазина ->group(false); чтобы вывести все товары из магазина на главную каталога.
После этого в xsl ('МагазинКаталогТоваров'

В месте где выводятся группы в атрибуте ссылки href
Цитата:
/shop/?group_id={@id}
Дальше нужно было вывести всех имеющихся производителей, это довольно интересный момент т.к. выводил их из xml-каталога. Выводились повторы т.к. выбрать можно их только у товаров по xPath выражению:
Цитата:
/shop/shop_item/shop_producer/name
в итоге выводятся все абсолютно значения элементов name, а нужны были только уникальные.
Решение - Группировка методом Стива Мюнха:
Цитата:
для начала ключ
<xsl:key name = "xProducer" match = "/shop/shop_item/shop_producer/name" use = "." />
Потом темплейт:
<xsl:template match="shop_item/shop_producer">
//вот эта магическая строка

<xsl:variable name = 'exProd' select = "name[generate-id(.) = generate-id(key('xProducer', .))]" />
<xsl:for-each select = '$exProd'>
//выводятся ссылки на уникального производителя который есть у товаров
<li><a href = '/shop/?group_id={$category_id}&producer_id={../@id}' ><xsl:value-of select="."/></a></li>
</xsl:for-each>
</xsl:template>
и в завершении условия на вывод товаров по категории, по производителю, или по категории И производителю :
Цитата:
в начале файла определяем переменные
<xsl:variable name = 'category_id' select = "shop/category_id" />
<xsl:variable name = 'producer_id' select = "shop/producer_id" />
<xsl:choose>
1. Все товары если переменные пустые.
<xsl:when test="$category_id='' and $producer_id = ''">
<xsl:apply-templates select="shop_item" />
</xsl:when>
2. По категории если пустая - производитель
<xsl:when test="$producer_id =''">
<xsl:apply-templates select="shop_item[shop_group_id=$category_id]" />
</xsl:when>
3. По производителю если пустая - Категория
<xsl:when test="$category_id=''">
<xsl:apply-templates select="shop_item[shop_producer/@id =$producer_id]" />
</xsl:when>
4. Ну и по обоим переменным если они существуют.
<xsl:otherwise>
<xsl:apply-templates select="shop_item[shop_group_id=$category_id][shop_producer/@id =$producer_id]" />
</xsl:otherwise>
</xsl:choose>
Вот такая вот схема, в hostCms меньше месяца работаю. Если есть предложения как улучшить код, я слушаю : )