Блок не работает потому что он отображает товары из массива
products. PHP код главной страницы передает в шаблон этот массив, а на других страницах этот массив в шаблон не передается, просто незачем.
Для того, чтобы этот код заработал на карточках товаров необходимо в файл
/custom/hooks.php добавить следующий код:
Код:
function onProductDisplay($code, $tmpl) {
$tmpl->setLoop('products', getProductsArray());
}
Но, в данном случае это не совсем оптимальный подход. Тут получается, что выбираются вообще все товары магазина и всем скопом передаются в шаблон, и уже в самом шаблоне осуществляется фильтрация при помощи
TMPL_IF в результате которой вводятся лишь товары имеющие ненулевую ноду
bestseller.
Этот подход оправдан для главной страницы: она отображается гораздо реже, чем на карточки товаров и не сильно нагружает сервер. А так же это позволяет очень легко
настраивать товары, отображаемые на главной странице.
А вот в данном случае лучше для массива
products сразу отбирать товары с нодой
bestseller при помощи
xpath, вот так:
Код:
function onProductDisplay($code, $tmpl) {
$tmpl->setLoop('products', getProductsArray("//product[bestseller=1]"));
}
И, тогда
TMPL_IF в шаблоне становится не нужен:
Код:
<div class="items-list">
<TMPL_IF NAME='products'>
<TMPL_LOOP NAME='products'>
<TMPL_INCLUDE FILE="_item.tmpl" MODE="INLINE">
</TMPL_LOOP>
</TMPL_IF>
</div>
P.S. Ваш вопрос очень сильно перекликается
вот с этой темой. Почитайте и ее тоже. Вероятно, найдете для себя что-то полезное.