Вывести на странице одну и ту же характеристику для всех товаров Есть решение

Привет! Hi all! ))

Вывожу на главной характеристику param1 для всех товаров, т.е. выводится список.

Пока лимит 10, все ок, сейчас потребовалось поставить 1000 - белий страница.... Подозреваю, что это костыль. А как правильно вытащить на страницу эту характеристику, собранную со всех товаров?

Вот код, собрал из шпаргалки)))

{$products = $wa->shop->products(null,null,10)}
    {foreach $products as $p}
        {if $wa->shop->product($p.id)->features['param1']}
                <span class="">{$wa->shop->product($p.id)->features['param1']}</span>
        {/if}
    {/foreach}

8 ответов

  • 1
    Александр Партнер-разработчик 9 августа 2016 11:21 # Решение

    Посмотрите реализацию вывода характеристик товара в теме оформления Дефолт 3.0 в файле list-thumbs.html.

    Вам нужна строка получения характеристик в списке товаров категории:

    {$features = $wa->shop->features($products)}

    далее строка с которой начинается вывод этих характеристик:

    {if !empty($p.features)}


    • +1
      Сергей Сыроежкин Сергей Сыроежкин 9 августа 2016 23:52 #

      Так в категории это нормально, там же не выводятся сразу все товары, а если мне надо собрать с 10000 товаров, белая страница также.

      Приведенный мною код по сути те же яйца только в профиль...

  • 1
    Сергей Сыроежкин 10 августа 2016 16:28 #

    хм, и правда, 5000 товаров выводит как с куста!!! 15к попозже попробую.

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

    ведь внутри одно foreach

    {foreach $products as $p}

    выполняется второй foreach

    {foreach $p.features as $f_code => $f_value}

    а почему на порядки быстрее...???

  • 1
    Сергей Сыроежкин 10 августа 2016 17:02 #

    не пойму, правильно или нет сделал:

    {$products = $wa->shop->products(null,null,1000)}
    {$features = $wa->shop->features($products)}
    {foreach $products as $p}
        {if !empty($p.features)}
            {foreach $p.features as $f_code => $f_value}
                {if $features[$f_code].name|escape == 'param1' && $f_value > 0}
                    <span>{$p.name}</span>
                    <i>{$features[$f_code].name|escape} - {$f_value}</i>
                {/if}
            {/foreach}
        {/if}
    {/foreach}

    при 15000 все равно белый лист

    {$products = $wa->shop->products(null,null,15000)}
    • +3

      И зачем вы перебираете все варианты если вам нужен лишь один? Замените:

      {if !empty($p.features)}
              {foreach $p.features as $f_code => $f_value}
                  {if $features[$f_code].name|escape == 'param1' && $f_value > 0}
                      <span>{$p.name}</span>
                      <i>{$features[$f_code].name|escape} - {$f_value}</i>
                  {/if}
              {/foreach}
          {/if}

      на:

      {if !empty($p.features['param1'])}
          <span>{$p.name|escape}</span>
          <i>Имя характеристики - {$p.features['param1']}</i>
      {/if}
      • +1
        Сергей Сыроежкин Сергей Сыроежкин 11 августа 2016 16:33 #

        Хм, и правда наверное я тупанул. на 15000 все выводит...

        СПАСИБО!

        Щас еще попробую накидать условие по ВЕЛИЧИНЕ параметра, чтоб еще отсеяло лишнее.

        Если я правильно понимаю, то цикл проходит один раз, по всем товарам, да?

        А в моем варианте было проходов = все товары *кол-во характеристик, так что ли?

        Где бы почитать, не подскажете, про:

        $wa->shop->products(null,null,15000)

        т.к. товары добавляются, чтобы цифру не менять ручками, есть там типа AUTO или как правильно вписать?

        Звездочку пробовал - вообще не выводит.

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

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