Вывод дизайна карточки товара в зависимости от типа товара

Как сделать вывод дизайна карточки товара в зависимости от типа товара?

Создал в настройках темы поле , в которое вносятся id типа товара https://skr.sh/sJdS62jHsaT

Вывести значение легко
  {if !empty($theme_settings.product_list__images_cover)}
     {$theme_settings.product_list__images_cover}
 {/if}
Если ручками редактировать условие в шаблоне, то получается так {if $product.type_id == '126' || $product.type_id == '127' || $product.type_id == '128'} , т.е если появится новый тип, то нужно редактировать шаблон
А задача, чтобы код не редактировать. А просто в настройках темы указывать id типов товаров.

Есть решение?

5 ответов

  • 1
    replicant 2 мая 2023 19:27 #

    Создаете в теме настройку, например type_ids, перечисляете там типы через запятую. Затем в шаблоне разбираете так.

    {if $theme_settings.type_ids}
        {$type_ids = explode(',', $theme_settings.type_ids)}
    {/if}

    Потом можно, например, так

    {foreach $type_ids as $t}
    
    тут сравниваете тип товара с $t, т.е. тем, что выходит из массива ваших ID из настроек темы и формируете вывод
    
    {if $t = $product.type_id} ну и т.п.
    
    {/foreach}

    Ну или как-то похожим образом действуйте. Вариантов тут уже много можно придумать.

    • +1
      Виталий Виталий 3 мая 2023 08:30 #

      Сделал так в списке товаров

      {foreach $products as $product}
            {if $theme_settings.product_list__images_cover}
                {$product_list__images_cover = explode(',', $theme_settings.product_list__images_cover)}
            {/if}
          {foreach $product_list__images_cover as $product_images_cover}
                  {if $product_images_cover = $product.type_id}
                   {$images_cover = "imgcover"}
                 {/if}
        {/foreach}
      
          <div class=" {$images_cover} ">
           fjsdfjh
         </div> 
      
      {/foreach}

      {$images_cover} - добавляется всем товарам в class div блока....<div class=" {$images_cover} "></div>
      И получается у всех <div class="imgcover} ">
      Что не так?
      • +2
        replicant replicant 3 мая 2023 09:13 #

        Да примерно всё т.к. вы перемудрили слегка, вложив одно в другое. Формирование $type_ids не стоит вкладывать в разбор товаров ну и дальше тоже что-то странное...

        Ладно, давайте распишу способ попроще, например без лишнего foreach, хотя логика ровно точно такая же.

        {if $theme_settings.type_ids}
            {$type_ids = explode(',', $theme_settings.type_ids)}
        {/if}
        
        {foreach $products as $product} - начинаем разбор товаров
            
                {if in_array($product.type_id, $type_ids)}
                   если тип товара совпал с тем, что в массиве в настройках темы, формируем так
                    <div class="imgcover">
                {else}
                  или, когда тип товара не совпал, то вот так
                    <div>
                {/if}
        
                    ... тут может быть много контента, а может и не быть (момент творческий)
            
            
                </div> - тут закрываем открытый ранее в проверке на тип товара div
        
        {/foreach}

        Есс-но переменную ставите свою в нужных местах вместо type_ids.




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

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