Пару тем видел, но что то там как то сложно и задачи чуть другие. Итак, есть категории:
категория
-подкатегория
-подкатегория
в подкатегориях есть товары. Нужно обычный кусок текста показать на страницах товара всех подкатегорий, если родительская категория, простите за тавтологию, категория.
Если я правильно понял ваш запрос, вам нужно показать текстовый блок только у товаров, которые находятся в подкатегории второго уровня вложенности (не ПОДподкатегории и ниже).
Вы смотрите, сколько раз в переменной seo_path встречается слеш. Например, по substr_count. Если один раз, то это и есть товар из подкатегории, можно выводить блок.
На main_category можно не смотреть в данном случае.
я хочу показать текст во всех товарах, которые есть в категориях cat1-cat7, т.е. всех дочерних для категории cat. Уровень вложенности может быть любой. При этом seo path я, думаю, не подойдет, т.к. у товаров в seo path нет категорий, т.е. они все от корня: site.ru/tovar
Создайте на странице товара HTML блок с поддержкой SMARTY с контентом {$product|fn_print_r} и посмотрите, как меняются переменные в зависимости от товара и категории.
Переменная seo_path это не SEO URL в адресной строке браузера. Там именно ветка дерева категорий товара с кодами категорий.
Чтобы уже на верняка на все возможные случаи, допустим seo_path такие:
123
123/345
1234
1234/566
соответственно {if $product.seo_path|strstr:‘123/’} не учитывает 123 (на случай если в корневую категорию попал товар из примера выше cat), а если берем {if $product.seo_path|strstr:‘123’} то сюда попадет 1234, что как бы не нужно.
Я не кодер и для себя нашёл такой метод, который мне проще использовать.
Создаю в design\themes\responsive\templates\blocks\wrappers\ копию файла оболочки, оборачиваю содержимое в нужное мне условие, например {if count($products) > 0 && count($products) < 5}. В настройках блока выбираю эту оболочку. Блок выводится только на страницах категорий, где есть товары, но их меньше пяти.
Я бы смотрел наличие слешей в переменной seo_path - они там будут у всех подкатегорий, кроме корневых. {if $product.seo_path|strstr:'/'}подкатегория{else}категория{/if}
Не, если делать, то наверняка. Сюда войдет и 123/ и 4123/. Тут надо что то типа /123/ or ^123/ как туда регвыражения засунуть, я пока не знаю, ибо не понимаю вообще эти смарти.
Вообще мне думается что лучше дергать массив с хлебными крошками
{if $breadcrumbs.n.link|strstr:'id=1234'}
При перемещении категории все это просто вырубится, а не будет маячить в неправильном месте, но теоретически может быть, что будет категория с id=1234* в нужном месте. Все же регулярки с концом строки тут не хватает.
Да полный и не нужен, как я выше написал, удобно из хлебных крошек брать:
{if $breadcrumbs.n.link|strstr:'id=1234'}
Но в теории, может быть id категории, не нужной, быть например, 123456 и там тоже будет отображаться блок, т.к. подстроку он найдет, а т.к. в смарти я не понимаю, то не знаю как добавить регвыражение с концом строки, типа так id=1234$. В таком варианте оно работало бы абсолютно точно и безошибочно.
Есть модуль у Экомлабс, который привязывает блок в Товаре к категориям.
Очень удобно. Не знаю почему они будучи в теме промолчали))
И на вкладки кстати он тоже работает. Или я уже что то напутал)