Как Вывести Только Одну Характеристику

Всем привет, начал потихоньку осваивать систему и столкнулся с проблемой, не могу вывести только одну характеристику в grid_list.tpl. Что нужно добавить, что бы вывести название и значение одной определенной характеристики товара.

Отобразить все у меня получилось без проблем.

Вы пробовали выключать опцию Показывать на списке товаров у характристик:

http://prntscr.com/9fat1h

Вы пробовали выключать опцию Показывать на списке товаров у характристик:

http://prntscr.com/9fat1h

Да конечно, но дело в том, что характеристики у которой в настройках стоит тип - текст выводятся без названия самой характеристики и это не подходит. Очень хочется вывести несколько штук по отдельности в разных местах шаблона и обернуть их в div например.

Да конечно, но дело в том, что характеристики у которой в настройках стоит тип - текст выводятся без названия самой характеристики и это не подходит. Очень хочется вывести несколько штук по отдельности в разных местах шаблона и обернуть их в div например.

Первым делом узнать надо идентификатор характеристики. В админке наводим на Редактировать, смотрим строку состояния:

http://prntscr.com/9fkw7s

В данном случае это 14 ( ...feature_id=14...)

В коде добавляем следующую проверку:

{if $feature.feature_id == 14}
ВЫВОД ДАННЫХ ПО ХАРАКТЕРИСТИКЕ
{/if}

Например

{foreach from=$product_features item="feature"}
{if $feature.feature_id == 14}
...
{/if}
{/foreach}

Но тут конкретно уже ваш код надо смотреть, которым вы показываете все характеристики

Я хочу вывести максимальное количество информации на сетку товаров, сейчас это выглядит так:

e87h9e.jpg

Вывести опции у меня получилось без проблем, а вот с характеристиками ну никак не получается, точнее получилось вывести их все одной строкой, но это ограничивает возможность оформить все красиво. Очень хочется вывести по отдельности определенные характеристики добавить к каждой иконку через :before например. Есть 3-4 ключевых характеристики товара которые надо красиво вписать в содержимое этого блока. Вот как сейчас все это выглядит:

{if $products}

{script src="js/tygh/exceptions.js"}
{if !$no_pagination}
{include file="common/pagination.tpl"}
{/if}
{if !$no_sorting}
{include file="views/products/components/sorting.tpl"}
{/if}
{if !$show_empty}
{split data=$products size=$columns|default:"2" assign="splitted_products"}
{else}
{split data=$products size=$columns|default:"2" assign="splitted_products" skip_complete=true}
{/if}
{math equation="100 / x" x=$columns|default:"2" assign="cell_width"}
{if $item_number == "Y"}
{assign var="cur_number" value=1}
{/if}
{* FIXME: Don't move this file *}
{script src="js/tygh/product_image_gallery.js"}
{if $settings.Appearance.enable_quick_view == 'Y'}
{$quick_nav_ids = $products|fn_fields_from_multi_level:"product_id":"product_id"}
{/if}
{strip}
{foreach from=$splitted_products item="sproducts" name="sprod"}
{foreach from=$sproducts item="product" name="sproducts"}
{if $product}
{assign var="obj_id" value=$product.product_id}
{assign var="obj_id_prefix" value="`$obj_prefix``$product.product_id`"}
{include file="common/product_data.tpl" product=$product}
{assign var="form_open" value="form_open_`$obj_id`"}
{$smarty.capture.$form_open nofilter}
{hook name="products:product_multicolumns_list"}
{include file="views/products/components/product_icon.tpl" product=$product show_gallery=true}
{assign var="discount_label" value="discount_label_`$obj_prefix``$obj_id`"}
{$smarty.capture.$discount_label nofilter}
{if $item_number == "Y"}
{$cur_number}. 
{math equation="num + 1" num=$cur_number assign="cur_number"}
{/if}
{assign var="name" value="name_$obj_id"}
{$smarty.capture.$name nofilter}
{assign var="rating" value="rating_$obj_id"}
{if $smarty.capture.$rating}
{$smarty.capture.$rating nofilter}
{if $capture_options_vs_qty}{capture name="product_options"}{$smarty.capture.product_options nofilter}{/if}
{assign var="product_options" value="product_options_`$obj_id`"}
{$smarty.capture.$product_options nofilter}
{if $capture_options_vs_qty}{/capture}{/if}
{/if}
{assign var="old_price" value="old_price_`$obj_id`"}
{if $smarty.capture.$old_price|trim}{$smarty.capture.$old_price nofilter}{/if}
{assign var="price" value="price_`$obj_id`"}
{$smarty.capture.$price nofilter}
{assign var="clean_price" value="clean_price_`$obj_id`"}
{$smarty.capture.$clean_price nofilter}
{assign var="list_discount" value="list_discount_`$obj_id`"}
{$smarty.capture.$list_discount nofilter}
{if $settings.Appearance.enable_quick_view == 'Y'}
{include file="views/products/components/quick_view_link.tpl" quick_nav_ids=$quick_nav_ids}
{/if}
{if $show_add_to_cart}
{assign var="add_to_cart" value="add_to_cart_`$obj_id`"}
{$smarty.capture.$add_to_cart nofilter}
{/if}
{/hook}
{assign var="form_close" value="form_close_`$obj_id`"}
{$smarty.capture.$form_close nofilter}
{/if}
{/foreach}
{if $show_empty && $smarty.foreach.sprod.last}
{assign var="iteration" value=$smarty.foreach.sproducts.iteration}
{capture name="iteration"}{$iteration}{/capture}
{hook name="products:products_multicolumns_extra"}
{/hook}
{assign var="iteration" value=$smarty.capture.iteration}
{if $iteration % $columns != 0}
{math assign="empty_count" equation="c - it%c" it=$iteration c=$columns}
{section loop=$empty_count name="empty_rows"}
{__("empty")}
{/section}
{/if}
{/if}
{/foreach}
{/strip}
{if !$no_pagination}
{include file="common/pagination.tpl"}
{/if}
{/if}
{capture name="mainbox_title"}{$title}{/capture}

попробуйте

{$features = $product|fn_get_product_features_list} {foreach from=$features item="feature"} {if $feature.feature_id == 17} {* {if $feature.feature_id == 17 || $feature.feature_id == 18 .... любые id *}
{$feature.description}: {$feature.variant}
{/if} {/foreach}

Те характеристики, для которых стоит условие Показывать на списке товаров уже должны быть в массиве $product.product_features

Чтобы не делать лишние запросы к БД, попробуйте следующий код

{foreach from=$product.product_features item="feature"} {if $feature.feature_id == 17} {* {if $feature.feature_id == 17 || $feature.feature_id == 18 .... любые id *}
{$feature.description}: {$feature.variant}
{/if} {/foreach}

попробуйте

{$features = $product|fn_get_product_features_list} {foreach from=$features item="feature"} {if $feature.feature_id == 17} {* {if $feature.feature_id == 17 || $feature.feature_id == 18 .... любые id *}
{$feature.description}: {$feature.variant}
{/if} {/foreach}

Спасибо, код работает! Еще такой момент, текстовые значения выводятся а если стоит тип характеристики число, то выводится только одно ее название.

А как вывести туда же картинку характеристики "бренд" ?

Те характеристики, для которых стоит условие Показывать на списке товаров уже должны быть в массиве $product.product_features

Чтобы не делать лишние запросы к БД, попробуйте следующий код

{foreach from=$product.product_features item="feature"} {if $feature.feature_id == 17} {* {if $feature.feature_id == 17 || $feature.feature_id == 18 .... любые id *}
{$feature.description}: {$feature.variant}
{/if} {/foreach}

Странно, ничего не вывелось.

Странно, ничего не вывелось.

Странно, на демке вывелось. Хорошо, что первое решение заработало.

Картинка выводится следующим кодом:

{if $feature.variants[$feature.variant_id].image_pairs}
    {assign var="obj_id" value=$feature.variant_id}
    {include file="common/image.tpl" images=$feature[$feature.variant_id].image_pairs}
{/if}

$product.product_features по умолчанию (если нет модификаций) доступен только на детальной странице товаров. А тут речь идет о списке товаров на странице категории. $product.product_features будет заполнен только в том случае, если при вызове fn_gather_additional_products_data параметр get_features будет true. Но по умолчанию он false, поэтому и не получается так.

Еще такой момент, текстовые значения выводятся а если стоит тип характеристики число, то выводится только одно ее название.

А как вывести туда же картинку характеристики "бренд" ?

Действительно только название. И характеристики даже не все подгружаются.

Попробуйте {$features = $product|fn_get_product_features_list:"A"} вместо {$features = $product|fn_get_product_features_list}

Для вывода числового значения нужно использовать {$feature.variant|default:$feature.value_int} вместо {$feature.variant}.

Вот только, боюсь, такое решение возможно только для чисел и варианта из списка.

Картинку для бренда можно вывести так:

            {if $feature.feature_type == 'E'}
                {include file="common/image.tpl" images=$feature.variants[$feature.variant_id].image_pairs}
            {/if}

Внутри цикла

$product.product_features по умолчанию (если нет модификаций) доступен только на детальной странице товаров. А тут речь идет о списке товаров на странице категории. $product.product_features будет заполнен только в том случае, если при вызове fn_gather_additional_products_data параметр get_features будет true. Но по умолчанию он false, поэтому и не получается так.

Странно, зачем тогда настройка Показывать на списке товаров ?

Странно, зачем тогда настройка Показывать на списке товаров ?

В функции fn_gather_additional_products_data есть код:

        if ($params['get_features'] && !isset($product['product_features'])) {
            $product['product_features'] = fn_get_product_features_list($product, $params['features_display_on']);
        }

Т.е. параметр get_features все равно должен быть true, тогда и по настройкам подгрузится. А в списке товаров на странице категории get_features = false

Действительно только название. И характеристики даже не все подгружаются.

Попробуйте {$features = $product|fn_get_product_features_list:"A"} вместо {$features = $product|fn_get_product_features_list}

Для вывода числового значения нужно использовать {$feature.variant|default:$feature.value_int} вместо {$feature.variant}.

Вот только, боюсь, такое решение возможно только для чисел и варианта из списка.

Картинку для бренда можно вывести так:

            {if $feature.feature_type == 'E'}
                {include file="common/image.tpl" images=$feature.variants[$feature.variant_id].image_pairs}
            {/if}

Внутри цикла

Спасибо, все значения характеристик вывелись! Только осталось округлить их до целых чисел, я сделал так

{$feature.variant|default:$feature.value_int|round}

Числовые выглядят как надо, а тестовые стали нулями! Как мне правильно округлить?

И с картинкой бренда, код их не вывел, может я не туда его вставил, мне бы где-нибудь после

надо показать картинку бренда.

Спасибо, все значения характеристик вывелись! Только осталось округлить их до целых чисел, я сделал так

Тогда сделайте так:

{if $feature.value_int}{$feature.value_int|round}{else}{$feature.variant}{/if}

вместо:

{$feature.variant|default:$feature.value_int|round}

Да, функция fn_get_product_features_list, которую советовала simtechdev не возвращает картинку из базы. Попробуйте заменить:

{if $feature.feature_type == 'E'}
     {include file="common/image.tpl" images=$feature.variants[$feature.variant_id].image_pairs}
{/if}

на

{if $feature.feature_type == 'E'}
      {$image_pairs = $feature.variant_id|fn_get_image_pairs:'feature_variant':'V':true:true}
      {include file="common/image.tpl" images=$image_pairs}
{/if}

Тогда сделайте так:

{if $feature.value_int}{$feature.value_int|round}{else}{$feature.variant}{/if}

вместо:

{$feature.variant|default:$feature.value_int|round}

Да, функция fn_get_product_features_list, которую советовала simtechdev не возвращает картинку из базы. Попробуйте заменить:

{if $feature.feature_type == 'E'}
     {include file="common/image.tpl" images=$feature.variants[$feature.variant_id].image_pairs}
{/if}

на

{if $feature.feature_type == 'E'}
      {$image_pairs = $feature.variant_id|fn_get_image_pairs:'feature_variant':'V':true:true}
      {include file="common/image.tpl" images=$image_pairs}
{/if}

Спасибо! Все получилось как хотел!

Надеюсь это последний вопрос, остался постфикс характеристики и его тоже нужно показать.

Надеюсь это последний вопрос, остался постфикс характеристики и его тоже нужно показать.

Используйте следующие переменные в нужном месте:

{$feature.prefix}

и

{$feature.suffix}

Используйте следующие переменные в нужном месте:

{$feature.prefix}

и

{$feature.suffix}

Супер, все получилось!