Вы пробовали выключать опцию Показывать на списке товаров у характристик:
Да конечно, но дело в том, что характеристики у которой в настройках стоит тип - текст выводятся без названия самой характеристики и это не подходит. Очень хочется вывести несколько штук по отдельности в разных местах шаблона и обернуть их в div например.
Да конечно, но дело в том, что характеристики у которой в настройках стоит тип - текст выводятся без названия самой характеристики и это не подходит. Очень хочется вывести несколько штук по отдельности в разных местах шаблона и обернуть их в div например.
Первым делом узнать надо идентификатор характеристики. В админке наводим на Редактировать, смотрим строку состояния:
В данном случае это 14 ( ...feature_id=14...)
В коде добавляем следующую проверку:
{if $feature.feature_id == 14} ВЫВОД ДАННЫХ ПО ХАРАКТЕРИСТИКЕ {/if}
Например
{foreach from=$product_features item="feature"} {if $feature.feature_id == 14} ... {/if} {/foreach}
Но тут конкретно уже ваш код надо смотреть, которым вы показываете все характеристики
Я хочу вывести максимальное количество информации на сетку товаров, сейчас это выглядит так:
Вывести опции у меня получилось без проблем, а вот с характеристиками ну никак не получается, точнее получилось вывести их все одной строкой, но это ограничивает возможность оформить все красиво. Очень хочется вывести по отдельности определенные характеристики добавить к каждой иконку через :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}
Супер, все получилось!
попробуйте
{$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}
После вывода характеристик, перестал работать фильтр на страницах категорий. Выдает такую ошибку!