Если коротко, то
<xsl:apply-templates select="document('udata://catalog/getObjectsList/')/udata" mode="check-category" />
<xsl:template match="udata" mode="check-category">
<p>В категории нет товаров</p>
</xsl:template>
<xsl:template match="udata[lines/item]" mode="check-category">
<p>В категории есть товары</p>
</xsl:template>
Selector но не понятно как отсортировать тогда все дочерние объекты, он же выведет с предпоследней все последние, limit не решает данную задачу(
Если совсем "в лоб", то
$sel = new selector('pages');
$sel->types('hierarchy-type')->name('catalog', 'category');
$sel->where('hierarchy')->page($pageId)->childs(1);
$sel->where('is_active')->equals(1);
foreach($sel as $element) {
$objectsSel = new selector('pages');
$objectsSel->types('hierarchy-type')->name('catalog', 'object');
$objectsSel->where('hierarchy')->page($element->getId())->childs(1);
$objectsSel->where('is_active')->equals(1);
}
Но я бы выносил все это в событие добавления / изменения / удаления элемента.