Если вы хотите чтобы находясь в любом разделе, система выводила фильтр по товарам внутри раздела, то зачем вам передfвать фильтру type-id самого раздела (ведь фильтр вы выводите на странице раздела и type-id берете с текущей страницы)/ И у вас все работает только по тому, что находясь на странице раздела переменная
$own-filter пустая, так как мы не находимся на странице товара.
По умолчанию система сама определяет тип данных дочерних товаров, но при этом ищет товары только на один уровень вниз. Что у вас и происходит:
- переменная
$own-filter пустая
- система автоматически пытается определить тип данных дочерних товаров и там где они есть, она выводит фильтр.
К сожалению в макросе %catalog search()% нет возможности задать определение типа товаров лежащих на 2 и более глубоких уровнях вложенности. Поэтому предлагаю вам воспользоваться маленьким кастомным скриптом, который вернет type-id доминирующих у товаров в определенном разделе с указанной глубиной вложенности.
Разместите его где вам удобнее, например в /classes/modules/custom.php
/**
* Возвращает доминирующий тип данных среди дочерних всех страниц (в независимости от уровня вложенности)
* @return объектный тип данных
* @category_id id страницы, внутри которой ищем доминирующий тип данных
* @i_need_deep искать во всех уровнях вложенности. Если необходимо искать только в первом уровне вложенности, необходимо передать значение "0"
*/
public function getDepthDominantTypeId($category_id=NULL, $i_need_deep = 2) {
if(!$category_id) return ;
$type_id = umiHierarchy::getInstance()->getDominantTypeId($category_id,$i_need_deep);
return $type_id;
}
теперь для получения type-id используйте такой запрос:
<xsl:variable name="own-filter" select="document(concat('udata://custom/getDepthDominantTypeId/',$document-page-id))/udata" />
P.S. данную переменную стоит вызывать в самом шаблоне для раздела каталога, чтобы она лишний раз не формировалась