Вывод характеристик в карточке товара и на странице товара

Добрый день!

Есть два связанных вопроса:

  1. Нужно вывести характеристики на странице товара (основная страница с описанием и вкладками). Вывел так:
    {$features = $product|fn_get_product_features_list}
    {foreach from=$features item=“feature”}
    {if $feature.feature_id == 4 || $feature.feature_id == 13 || $feature.feature_id == 16}


    {$feature.description}:

    {$feature.variant}


    {/if}
    {/foreach}
    При этом если у характеристики выключена опция в настройках: Show in product list = False,
    то на основной странице товара она тоже перестает выводиться…
    Вопрос: как вывести характеристику на основной странице товара, если значение Show in product list = False. Мне нужно выключить эту характеристику в карточке товара, но при этом вывести на основной странице товара.
  2. Так как пока не нашел решения для первого вопроса, пошел другим путем и вывел на основной странице товара через конкретные ID (см. выше), и в карточке товара другие характеристики также по ID:
    {foreach from=$features name=features_list item=feature}
    {if $feature.feature_id == 1 || $feature.feature_id == 2 || $feature.feature_id == 3 || $feature.feature_id == 11 || $feature.feature_id == 12}
    {feature_value feature=$feature}{if !$smarty.foreach.features_list.last}{/if}
    {/if}
    {/foreach}
    Но выводятся не все характеристики, только 2 шт из 5 (настройки у них все одинаковые).

Попробовал в карточке товара вывести по-другому, но в таком случае выводится весь список характеристики (как нужно), но несколько раз (например тут в примере 5 характеристик и весь список выводится 5 раз):
{foreach from=$features item=“feature”}
{if $feature.feature_id == 1 || $feature.feature_id == 2 || $feature.feature_id == 3 || $feature.feature_id == 11 || $feature.feature_id == 12}
{feature_value feature=$feature}
{/if}
{/foreach}
Вопрос: как вывести в карточке товара нужные характеристики по ID?

Заранее спасибо, буду благодарен любым советам.

{$product.product_features.555.variants[$product.product_features.555.variant_id].variant nofilter}
Где 555 - id характеристики

1 лайк

Спасибо большое! А есть вариант через if перебором нужных id, чтобы меньше запросов к БД было?

Тут запросов к БД ни одного не формируется - эти данные уже есть на странице товара(даже если не выводятся), а это просто их вывод.

Спасибо! Характеристику выводит.
Есть ли возможность вывести название по такому же принципу? Например, {$feature.description}, если выключена опция Show in product list, не отображается. А если через $product, вроде {$product.description_features} такого нет?

Попробуйте

{$product.product_features.555.description}

1 лайк

Добрый день,

Спасибо! Всё отлично работает!

Можно ли сделать условие для вывода характеристики так, что если характеристика с нужным ID не заполнена, то ничего не выводилось?

Например, вот так:

{if !empty($product.product_features.555.variants[$product.product_features.555.variant_id].variant)}
{$product.product_features.555.variants[$product.product_features.555.variant_id].variant nofilter}
{/if}

2 лайка

Спасибо вам большое! Еще одна проблема по теме возникла. У характеристики несколько значений, но выводится только одна из трех. Не подскажете как вывести весь список с помощью этой же логики?
{$product.product_features.11.variants[$product.product_features.11.variant_id].variant nofilter}

Попробуйте

{foreach from=$product.product_features.11.variants item=var}
    {$var.variant nofilter}<br/>
{/foreach}
1 лайк

Работает! Спасибо вам большое!

1 лайк

Предложенными решениями характеристика выводится только в том случае, если она общая для всех категорий, т.е. вне группы. А как вывести характеристику, если она привязана к одной из групп? :wink:

Нужно распечатать массив и посмотреть его структуру. Что-то типа

{foreach from=$product.product_features.ID_ГРУППЫ.subfeatures.11.variants item=var}
    {$var.variant nofilter}<br/>
{/foreach}
1 лайк