Ну я всё же заморочился
Уж больно много я теряю, исключив из использования пару list_price / price
ИТАК
я решил, что плевать с ним, с расчетом, как там будет показываться в корзине, в заказе и в счете - это дело второе. Главное - на странице категории и детальной странице товара показать ДЕЙСТВИТЕЛЬНУЮ, верную и ПОЛНУЮ скидку на товар, то есть от list_price.
Нам нужен только один файл - /design/themes/responsive/templates/common/product_data.tpl
Находим блок начинающийся строкой (у меня строка 240)
{********************** Old Price *****************}
и в нем наш новый код дожен выглядеть так:
{********************** Old Price *****************}
{capture name="old_price_`$obj_id`"}
{if $show_price_values && $show_old_price}
<span class="cm-reload-{$obj_prefix}{$obj_id}" id="old_price_update_{$obj_prefix}{$obj_id}">
{hook name="products:old_price"}
{$list_price="SELECT list_price FROM ?:products WHERE product_id = ?i"|db_get_field:$product.product_id}
{if $product.discount || $product.list_discount}
<span class="ty-list-price ty-nowrap" id="line_old_price_{$obj_prefix}{$obj_id}">{if $details_page}{__("old_price")}: {/if}<span class="ty-strike">{include file="common/price.tpl" value=$list_price span_id="old_price_`$obj_prefix``$obj_id`" class="ty-list-price ty-nowrap"}</span></span>
{/if}
{*if $product.discount}
{if !$product.included_tax}
<span class="ty-list-price ty-nowrap" id="line_old_price_{$obj_prefix}{$obj_id}">{if $details_page}{__("old_price")}: {/if}<span class="ty-strike">{include file="common/price.tpl" value=$product.list_price|default:$product.list_price - $product.tax_value span_id="old_price_`$obj_prefix``$obj_id`" class="ty-list-price ty-nowrap"}</span></span>
{else}
<span class="ty-list-price ty-nowrap" id="line_old_price_{$obj_prefix}{$obj_id}">{if $details_page}{__("old_price")}: {/if}<span class="ty-strike">{include file="common/price.tpl" value=$product.original_price|default:$product.base_price span_id="old_price_`$obj_prefix``$obj_id`" class="ty-list-price ty-nowrap"}</span></span>
{/if}
{elseif $product.list_discount}
{if !$product.included_tax}
<span class="ty-list-price ty-nowrap" id="line_list_price_{$obj_prefix}{$obj_id}">{if $details_page}<span class="list-price-label">{__("list_price")}:</span> {/if}<span class="ty-strike">{include file="common/price.tpl" value=$product.base_price - $product.tax_value span_id="list_price_`$obj_prefix``$obj_id`" class="ty-list-price ty-nowrap"}</span></span>
{else}
<span class="ty-list-price ty-nowrap" id="line_list_price_{$obj_prefix}{$obj_id}">{if $details_page}<span class="list-price-label">{__("list_price")}:</span> {/if}<span class="ty-strike">{include file="common/price.tpl" value=$product.base_price span_id="list_price_`$obj_prefix``$obj_id`" class="ty-list-price ty-nowrap"}</span></span>
{/if}
{/if*}
{/hook}
<!--old_price_update_{$obj_prefix}{$obj_id}--></span>
{/if}
{/capture}
здесь нами добавлена 6, 7, 8 и 9-я строки. строки с 10 по 22-ю исключаем, обнеся их смарти-комментарием. Конечно здесь есть хук и можно вынести в модуль оверрайдом хука, но ниже нам надо еще переписать лейбл скидки, и там хука нет, поэтому всё равно в этот файл придется вносить правки.
Идем дальше, и ищем блок, начинающийся строкой (у меня строка 364)
{************************************ Discount label ****************************}
здесь мы вставляем код
{************************************ Discount label ****************************}
{capture name="discount_label_`$obj_prefix``$obj_id`"}
{if $show_discount_label && ($product.discount_prc || $product.list_discount_prc) && $show_price_values}
<span class="ty-discount-label cm-reload-{$obj_prefix}{$obj_id}" id="discount_label_update_{$obj_prefix}{$obj_id}">
{$discount=(($list_price-$price)*100/$list_price)|round}
<span class="ty-discount-label__item" id="line_prc_discount_value_{$obj_prefix}{$obj_id}"><span class="ty-discount-label__value" id="prc_discount_value_label_{$obj_prefix}{$obj_id}">{__("save_discount")} {$discount}%</span></span>
{* <span class="ty-discount-label__item" id="line_prc_discount_value_{$obj_prefix}{$obj_id}"><span class="ty-discount-label__value" id="prc_discount_value_label_{$obj_prefix}{$obj_id}">{__("save_discount")} {if $product.discount}{$product.discount_prc}{else}{$product.list_discount_prc}{/if}%</span></span>*}
<!--discount_label_update_{$obj_prefix}{$obj_id}--></span>
{/if}
{/capture}
{if $no_capture}
{$capture_name = "discount_label_`$obj_prefix``$obj_id`"}
{$smarty.capture.$capture_name nofilter}
{/if}
наши добавленные строки 5-я и 6-я, а 7-ю строку - оборачиваем в смарти-комментарий
ТЕСТЫ
Категории:
категория 1
--- категория 1.1
категория 2
товар 1:
Рекомендованная цена 120000 Цена 100000
Категория 1
В оптовых скидках - 10% для Зарегистрированных от 1 шт
товар 2:
Рекомендованная цена 450000 Цена 155000
Категория 1, категория 1.1
товар 3:
Рекомендованная цена 77000 Цена 77000
Категория 1
Можно усложнить код шаблона, но я не стал - главное условие сейчас, чтобы Рекомендованная цена нигде не была равна нулю. То есть, если скидки в каталоге нет - просто ставим
Рекомендованная цена = Цена
Акции для каталога
Скидка на 5000:
Условие - товар в категории 1.1
Бонус - скидка на товар в размере 5000 Р
Скидка 25%:
Условие - Группа покупателя - Зарегистрированные
Бонус - скидка на товар в размере 25%
Вобщем, что в каталоге, что в карточке товара пока показывает всё верно