Вывод характеристики товара в шаблоне Корзины Есть решение

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

Пытаюсь вывести характеристику (input) у товара.

Делаю

{foreach $cart.items as $item}
                            {$p = $wa->shop->product($item.product_id)}
                            {$sku_features = $p->getSkuFeatures()}
                            {wa_dumpc($sku_features)}
{/foreach}

Получаю пустой массив array()

Что я делаю не так, объясните плиз.

3 ответа

  • 1
    Minya Jam 23 марта 2016 13:21 # Решение

    rat, вот такой вариант придумал, как оно, если по нагрузке?

    {$ids = array()}

    Если php < 5.5.0
    {foreach $cart.items as $item}
    {$ids[] = $item.product_id}
    {/foreach}

    Если php >= 5.5.0

    {$ids = array_column($cart.items, 'product_id')}


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


    {foreach $cart.items as $item}

    {$p = $items[$item.product.id]}

    {if !empty($p.features)}
    <span>
    {foreach $p.features as $f_code => $f_value}
    {$features[$f_code].name|escape}:
    {if is_array($f_value)}
    {if $features[$f_code].type == 'color'}
    {implode('<br /> ', $f_value)}
    {else}
    {implode(', ', $f_value)}
    {/if}
    {else}
    {$f_value}
    {/if}
    {/foreach}
    </span>
    {/if}

    {/foreach}


    • +1

      Это похоже на то, как сделано в теме "Дефолт" разработчиками Вебасиста. Видимо, вполне можете оставить такой вариант.

      • +1
        Minya Jam Minya Jam 24 марта 2016 09:29 #

        Единственное, возникает другая проблема, как адаптировать код, под товары с выбором по хар-кам :(.

  • 1

    Наверное, потому что вы пытаетесь получить характеристики артикулов (getSkuFeatures), а не товара. Для артикулов вашего товара, видимо, никакие значения характеристик не указаны.

    Для отображения характеристик в списке товаров используйте тот же приём, с помощью которого характеристики отображаются в списках товаров в теме дизайна "Дефолт" (посмотрите исходный код этой темы). Или используйте плагин, который упростит эту выполнение этой задачи.

  • 1
    Minya Jam 22 марта 2016 17:24 #

    Сам разобрался.

    Тот же прием не сработает

    А вот такой сработает:

    {foreach $cart.items as $item}
        {$p = $wa->shop->product($item.product_id)}
    {wa_dumpc($p.features)} {/foreach}
    • +1

      Применительно к корзине это решение может считаться сносным. Но если захотите применить то же самое в категориях товаров, имейте в виду, что обращение к полю features в цикле foreach вызывает выполнение нескольких SQL-запросов к таблицам со значениями характеристик. Если в цикле перебирается большое количество товаров, то и количество запросов вырастает соответственно. Посещаемость корзины не так велика, как посещаемость страниц категорий, поэтому негативный эффект тут будет не так заметен.

      • +1
        Minya Jam Minya Jam 23 марта 2016 11:58 #

        Это да, по поводу нагрузки согласен.

        Я пытался делать так, вне цикла:

        {$products = $wa->shop->products($cart.items)}

        Возвращает array()

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

        Возвращает array()

        {$wa->shop->products()} - я так понимаю эта функция выводит коллекцию товаров

        Т.е. по логике нужно получить все id товаров из $cart и передать функции {$products = $wa->shop->products('id/1,2,3,4,5')}

        Затем, получить все характеристики {$features = $wa->shop->features($products)}

        Верное решение?

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

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