Обычный текстовый блок на траницах товара определенной категории

Пару тем видел, но что то там как то сложно и задачи чуть другие. Итак, есть категории:

категория
-подкатегория
-подкатегория

в подкатегориях есть товары. Нужно обычный кусок текста показать на страницах товара всех подкатегорий, если родительская категория, простите за тавтологию, категория.

Создаете блок на странице макета Категории, выключаете его и в настройках блока на вкладке Статус включаете для нужных категорий

Это в примере выше их две, а так очень много, плюс наверное еще будут добавляться, не следить же за ними. Вариант не очень.

Из того, что есть в стандарте, это самое простое

В массиве $product есть переменные:

[seo_path] => 357/358
[main_category] => 358

В seo_path путь от корневой категории до конечной подкатегории слева направо
main_category категория, что выделена жирным шрифтом в карточке товара

image

Вы можете по количеству слешей определять уровень вложенности категорий.

Это не самое простое и вообще не выполнимое физически. Вручную что то делать не наши методы. Я имею ввиду что то в шаблон вставить.

Очень интересно, но непонятно, я про то как бы подумал, но не понял. Скажем так, я понимаю как его засунуть зная родительскую категорию:

{{if ($product.main_category == 0000)}}

Но я не понимаю как это сделать для подкатегорий.

Если я правильно понял ваш запрос, вам нужно показать текстовый блок только у товаров, которые находятся в подкатегории второго уровня вложенности (не ПОДподкатегории и ниже).
Вы смотрите, сколько раз в переменной seo_path встречается слеш. Например, по substr_count. Если один раз, то это и есть товар из подкатегории, можно выводить блок.

На main_category можно не смотреть в данном случае.

Нет, не совсем, есть категории:

cat
-cat1
–cat2
—cat3
—cat4
–cat5
—cat6
-cat7

я хочу показать текст во всех товарах, которые есть в категориях 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}. В настройках блока выбираю эту оболочку. Блок выводится только на страницах категорий, где есть товары, но их меньше пяти.
image

Я бы смотрел наличие слешей в переменной seo_path - они там будут у всех подкатегорий, кроме корневых.
{if $product.seo_path|strstr:'/'}подкатегория{else}категория{/if}

Не, если делать, то наверняка. Сюда войдет и 123/ и 4123/. Тут надо что то типа /123/ or ^123/ как туда регвыражения засунуть, я пока не знаю, ибо не понимаю вообще эти смарти.

Вообще мне думается что лучше дергать массив с хлебными крошками

{if $breadcrumbs.n.link|strstr:'id=1234'}

При перемещении категории все это просто вырубится, а не будет маячить в неправильном месте, но теоретически может быть, что будет категория с id=1234* в нужном месте. Все же регулярки с концом строки тут не хватает.

Если хотите кодить, то попробуйте так, чтобы полный путь с айдишниками узнать

{$id_path = "SELECT id_path FROM ?:categories WHERE category_id = ?i"|db_get_field:$product.main_category}
{if $id_path}
    {$id_path = '/'|explode:$id_path}
    {$id_path|fn_print_r}
{/iif}

(!) Не тестировано

Да полный и не нужен, как я выше написал, удобно из хлебных крошек брать:

{if $breadcrumbs.n.link|strstr:'id=1234'}

Но в теории, может быть id категории, не нужной, быть например, 123456 и там тоже будет отображаться блок, т.к. подстроку он найдет, а т.к. в смарти я не понимаю, то не знаю как добавить регвыражение с концом строки, типа так id=1234$. В таком варианте оно работало бы абсолютно точно и безошибочно.

Есть модуль у Экомлабс, который привязывает блок в Товаре к категориям.
Очень удобно. Не знаю почему они будучи в теме промолчали))
И на вкладки кстати он тоже работает. Или я уже что то напутал)

Скорее всего там не то.

Есть 10 тыс. категорий, нужно включить для тысячи и как это делать? :slight_smile:

Попросить Экомлабс, чтобы добавили галочку -Учитывать подктегории))
Выбрать основную и наслаждаться.