dimzza
17.Декабрь.2015 00:00:00
1
Всем привет, начал потихоньку осваивать систему и столкнулся с проблемой, не могу вывести только одну характеристику в grid_list.tpl. Что нужно добавить, что бы вывести название и значение одной определенной характеристики товара.
Отобразить все у меня получилось без проблем.
Вы пробовали выключать опцию Показывать на списке товаров у характристик:
http://prntscr.com/9fat1h
dimzza
17.Декабрь.2015 00:00:00
3
Да конечно, но дело в том, что характеристики у которой в настройках стоит тип - текст выводятся без названия самой характеристики и это не подходит. Очень хочется вывести несколько штук по отдельности в разных местах шаблона и обернуть их в 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}
Но тут конкретно уже ваш код надо смотреть, которым вы показываете все характеристики
dimzza
18.Декабрь.2015 00:00:00
5
Я хочу вывести максимальное количество информации на сетку товаров, сейчас это выглядит так:
Вывести опции у меня получилось без проблем, а вот с характеристиками ну никак не получается, точнее получилось вывести их все одной строкой, но это ограничивает возможность оформить все красиво. Очень хочется вывести по отдельности определенные характеристики добавить к каждой иконку через :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"}
{/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}
dimzza
19.Декабрь.2015 00:00:00
8
попробуйте
{$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}
Спасибо, код работает! Еще такой момент, текстовые значения выводятся а если стоит тип характеристики число, то выводится только одно ее название.
А как вывести туда же картинку характеристики "бренд" ?
dimzza
19.Декабрь.2015 00:00:00
9
Те характеристики, для которых стоит условие Показывать на списке товаров уже должны быть в массиве $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
dimzza
21.Декабрь.2015 00:00:00
15
Действительно только название. И характеристики даже не все подгружаются.
Попробуйте {$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}
dimzza
21.Декабрь.2015 00:00:00
18
Тогда сделайте так:
{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}