Отображение блока только в конкретной категории товаров

Приветствую.

Как сделать так, чтобы блок отображался только для товаров конкретной категории?

Попробовал такую функцию:

{if $product.categories.id = 155} {$wa->block("product_area_facts_folt")}{/if}

Но блок в этом случае отображается вообще для всех товаров

6 ответов

  • 1
    Михаил Ушенин 18 сентября 2023 09:23 #

    Возможно, вы ошиблись в операторе сравнения: он должен быть, как минимум, ==, а не =. И проверьте, содержится ли в переменной $product.categories.id нужное вам значение.

    • +1
      Роман Жуков Роман Жуков 18 сентября 2023 10:16 #

      Здесь я точно ошибся. Спасибо

      По виду у меня теперь
      {if $product.categories.id == 155} {$wa->block("product_area_facts_folt")}{/if}

      Но не отображается вообще.

      Перед этим у меня идет функция:

      {$hidden = 0}
      {foreach $product.categories as $c}
      {if $c.id == 155 || $c.id == 152}{$hidden = 1}
      {/if}
      {/foreach}
      {if $hidden == 0}
      {$wa->block("product_area_facts")}{/if}
  • 1
    Роман Жуков 18 сентября 2023 10:19 #

    Разобрался.

    Сделал так:

    {$hidden = 0}
    {foreach $product.categories as $c}
    {if $c.id == 155 || $c.id == 152}{$hidden = 1}
    {/if}
    {if $c.id == 155}{$hidden = 2}{/if}
    {/foreach}
    {if $hidden == 0}
    {$wa->block("product_area_facts")}{/if}
    {if $hidden == 2}
    {$wa->block('product_area_facts_folt')}{/if}
  • 1
    replicant 18 сентября 2023 13:29 #

    Просто проговорите этот код словами.

    - Если товар НЕ в 155 и НЕ в 152 категориях, то показывается блок product_area_facts
    - Если товар в 155 или 152 категориях, то никакие блоки не показываются.
    - Но если товар в 155 категории, то показывается блок product_area_facts_folt

    Вам не кажется это немного странным?

    Теперь о том как именно работает код по итогу, несмотря на написание.
    - Если товар в 152 категории, то никакие блоки не выводить.
    - Если товар в 155 категории, то выводить блок product_area_facts_folt.
    - Во всех остальных случаях выводить блок product_area_facts.

    Короче говоря, надо написать более логично, убрав $c.id == 155 ||. Эти игры с hidden=1 и сразу же hidden=2 при 155 категории даже в таком простом примере весь мозг "переворачивают".

  • 1
    Митрофан Игнатьев 20 сентября 2023 21:33 #

    Чтобы блок отображался только для товаров конкретной категории, нужно использовать функцию if_category(). Эта функция принимает два аргумента: ID категории и значение, которое должно быть равно ID категории товара.

  • 1
    Митрофан Игнатьев 20 сентября 2023 21:35 #

    Я бы сделал так {if_category $product.categories.id 155} {$wa->block("product_area_facts_folt")}{/if_category}

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

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