Отображение товаров в категории Есть решение

Здравствуйте, подскажите что делаю не так.  Хочу чтобы отображение товаров определенного типа   или  в определенной категории  c подкатегориями отображалось отлично от других. 

Вот например вывожу 

{if $theme_settings.catalog_type == 'list' && $category.id == 2}{$catalog_show = 'thumbs'}{else}{$catalog_show = 'list'}{/if}

работает но вывод меняется только у товаров из категории 2 дочерние понятное дело не меняются

попробовал так 

{if $theme_settings.catalog_type == 'list' && $product.type_id == 16}{$catalog_show = 'thumbs'}{else}{$catalog_show = 'list'}{/if}  не работает. 

7 ответов

  • 2
    replicant 6 марта 2021 21:25 # Решение

    В первом случае недостаточно полное условие, т.к. не включены подкатегории, id которых можно получить скажем из {foreach $category.subcategories as $sc} {$sc.id} {/foreach}.

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

  • 1
    Петр Заздравных 6 марта 2021 23:02 #

    Так я тоже делал в самом начале

    {if $theme_settings.catalog_type == 'list'}  включил настройку
    {if $category.id == 2} обозначил когда нужно искать 
    {foreach $category.subcategories as $cs} перебрал подкатегории 
    {if $category.id == {$cs.id}}   тут вот сомневаюсь 
    {$catalog_show = 'thumbs'}
    {else}
    {$catalog_show = 'list'}
    {/if}
    {/foreach}
    {/if}
    {/if}
    • +2
      replicant replicant 7 марта 2021 08:24 #

      Ой жесть. Даже не знаю как этот код комментировать. Пойдем другим путем. Вариант номер два.

      Подсказка. Допустим у нас есть категория 2, а в неё вложены категории 3,4,5 и 6. Т.е. 2 является для них родителем.

      Мы проверяем настройку и id категории 2, а в подкатегориях условие на родителя, т.е. на 2.

      Структура массива категорий 3, 4, 5 и 6 имеет вид.

        'category' => [
          'id' => '5',
          'parent_id' => '2',

      Значит первое условие можно переписать так и при связке ИЛИ оно будет работать как в самой категории 2, так и в её вложенностях первого уровня.

      {if $category.id == 2 || $category.parent_id == 2}
      {$catalog_show = 'thumbs'}
      {else}
      {$catalog_show = 'list'}
      {/if}

      Поскольку у вас вид зависит теперь от категории, то, на мой взгляд, уже не имеет смысла сверяться с настройкой вида в теме дизайна, поэтому проверку на значение $theme_settings.catalog_type пропускаем. Впрочем можете её и добавить, усложнив условие, но, повторюсь, теперь это лишнее. Формально ведь важно на выходе получить $catalog_show равный либо list либо thumbs в зависимости от условий, что собственно уже и происходит.

      • +1
        Петр Заздравных Петр Заздравных 7 марта 2021 13:31 #

        по такому условию пробовал только без "или" , а сразу  category.parent_id ==2, но так почему то не работает. Т.е category.id проверяется, а category.parent_id ничего не происходит. Может из-за того что категории динамические внутри родительской ? 

        • +1
          replicant replicant 7 марта 2021 17:35 #

          В категориях, формируемых фильтрацией, все точно так же (ниже пример структуры массива из динамической категории)

            'category' => [
              'id' => '152',
              'left_key' => '162',
              'right_key' => '163',
              'depth' => '1',
              'parent_id' => '139',

          Т.е., если родитель 139, то он будет доступен к проверке в динамической подкатегории, которая имеет id 152 по такому условию и в самом себе. Проверка выдаст "да" в нужных местах.

          {if $category.id == 139 || $category.parent_id == 139 } да {else} нет {/if}
          

          Возможно ещё какой-то нюанс остался незамеченным, но структурно всё должно работать корректно.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите