Условие по ID категории

Задача вывести строку с текстом на странице  товара по условию принадлежности к определенной категории .

Например для категории с ID равным 19 вставляю код  в product.cart.html  

 {if $category.id=19}
..........текст........................................
 {/if} 

и текст прописывается для всех товаров во всех категориях...т.е. условие не работает. 

Что должно быть вместо   $category.id ? 


6 ответов

  • 2
    replicant 8 июля 2020 09:34 #

    На скриншоте все прекрасно видно как всё работает и выводит ID категорий в которых находится товар. Вы просто сами запутались на ровном месте.

    Нет никаких нижних и верхних категорий, в которых находится товар. Он либо находится в категории, либо нет. Дерево категорий, которое вы себе представляете, к этому отношения не имеет, несмотря на тот, факт, что визуально существуют вложенности категорий друг в друга и их можно представить в виде древовидной структуры. В массиве категорий товара $product.categories всё это представлено плоско. Там только категории, в которых товар находится явно и только они являются категориями для товара, а не потому что существует какая-то иерархия категорий, поэтому товар автоматически лежит во всех вышестоящих категориях. Это лишь проекция товара вверх по дереву согласно настройке категории-родителя.

    Вот сами прикиньте. Если товар лежит в 795 категории, а вы делаете проверку на его наличие в 19-й категории, то чего вы ожидаете увидеть в результате такого проверочного условия?

    {if $c.id == 19}
           <p>Вывести текст для ID = {$c.id}</p>
    {/if}

    Есс-но ничего у вас и не выведет на экран, потому что условие не выполняется.

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

    {if $c.id == 19}
           <p>Ура, товар в категории с ID = 19</p>
    {else}
          <p>Увы, но данный товар не в 19-й категории</p>
    {/if}

    Код рабочий. На ваш первоначальный вопрос о

    вывести строку с текстом на странице товара по условию принадлежности к определенной категории

    данное решение отвечает на 100%. Если вы задавали один вопрос, но имели ввиду что-то другое, то увы, мысли не читаю.

  • 2
    replicant 8 июля 2020 09:57 #

    Кстати, может быть, вам будут интересны идеи из вот этой темы https://support.webasyst.ru/fo...

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

  • 1
    Дмитрий К 7 июля 2020 23:40 #
    $product.categories[$product.category_id].parent_id == 19 - это срабатывает , если 19 это ID категории на уровень выше чем категория товара , но ведь подкатегорий может быть много . Как то нужно перебирать все родительские категории товара вверх к более старшим? 
    Не могу сообразить, подскажите плз решение. 

    • +2
      replicant replicant 8 июля 2020 05:23 #

      На странице товара доступен массив всех категорий, в которых находится товар. Он разбирается так

      {foreach $product.categories as $c}
        {if $c.id == ваш ID}
             <p>Вывести текст для ID = {$c.id}</p>
        {/if}
      {/foreach}

      Можете ещё добавить проверку на наличие $c.status, чтобы перебирать только видимые категории, но это уже частный случай и как правило, когда нет участия товара в скрытых категориях, то оно не нужно.

      • +1
        Дмитрий К Дмитрий К 8 июля 2020 08:31 #

        Не срабатывает на product.cart.html ((

         {foreach $product.categories as $c}
          {if $c.id == 19}
               <p>Вывести текст для ID = {$c.id}</p>
          {/if}
        {/foreach}

        Если прописать просто 

        {if $product.categories[$product.category_id].parent_id == 19}
               <p>Вывести текст для ID = {$c.id}</p>
          {/if}

        то выводит 

  • 1
    Дмитрий К 8 июля 2020 09:13 #

    Если просто задать вывод без условий 

    {foreach $product.categories as $c}
    
           <p>Вывести текст для ID = {$c.id}</p>
     
    {/foreach}   

    то получаем все туже картинку

    почему то цикл не работает ... 

    Да и 795 это ID самой нижней подкатегории в которой и находится товар 

  • 1
    Дмитрий К 8 июля 2020 12:27 #

    Да , спасибо! Я не конкретизировал ситуацию, думая что если товар находится в "нижней" категории то есть какой-то массив  со всеми ID его родительских категорий, и задав любую из них мы получим результат. 

    Т.е. если товар лежит в своей категории то никак нельзя отследить номера всех родительских категорий ? 

    Мысль была в том что например есть Категории с подкатегориями : 

    Бытовая техника (ID1) - - Мойки(ID19) - Зигмунд(ID75) 

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

    Указав ID=2 мы применяем его ко всем товарам в категории "Мойки, смесители"(ID2)  и ко всем товарам нижестоящих категорий.

    Вот это я имел ввиду) 

    И неужели нет наработок ? Применять условие по категориям - это же очень востребованно, поидее )

    Поизучаю смежную тему указанную вами, спасибо! 



  • 1
    Дмитрий К 15 июля 2020 15:37 #

    А если задачу решать с помощью списка - 

    товары из нужных категорий внести в список и проверять на странице товара его по условию 

    {foreach $переменнаясписка as $L}
      {if $L = "Кондиционеры"}
           <p>Вывести текст Наши кондиционеры - самые супер пупер</p>
      {/if}
    {/foreach}

    по идее должно работать , осталось только название переменной списка найти и правильный синтаксис для проверки условия.

    Подскажите пжл , кто знает  

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

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