"Иногда они возвращаются".
Итак, вернулась и я к этой задаче. Опять же - на уровне "показать правильную цену на витрине", корзина все так же не нужна.
Конкретный пример: у меня 2 валюты в таблице, ГРИВНЯ по айдишнику раньше ДОЛЛАРА. И есть несколько категорий товара, которые имеют постоянную цену в гривнях.
Я делаю вот так:
(если у Вас есть НЕЧТО в евро, то в знаменателе можно $currencies[0][3] изменять на кросс-курс, только ж не перепутайте, что на что делите ( если кросс 1,4 - там нужно ставить (1/1,4) или просто перемещать 1,4 в числитель. И так можно задать хоть для каждой категории товара свой перерасчет цены)
Но только я получаю в целом не устраивающий по внешнему виду результат, например, для какой-то фигни стоимостью 80 грн:
Цена: USD 9.81595092025 (80 грн.)
То есть гривня без копеек меня устраивает, а баксы с таким "хвостом" - разумеется, нет.
Правки в product_brief.tpl.html
round() там не работает, как, впрочем, и остальные ПХП-шные методы округления хоть куда-нибудь (вверх, вниз, до целых и пр.). Как прямо в шаблоне "прикрутить" к этим значениям функцию _formatPrice, чтобы ФОРМАТНУТЬ цену до нормального вида?
(если вставляешь кусок кода ПХП, то он "не видит" эту переменную, которую ему надо обрабатывать - {$product_info.Price*$currencies[1][3]/$currencies[0][3]}
Ругается про деление на ноль или вообще игнорирует, если исхитриться убрать знаменатель в принципе (заменять на ЧИСЛО).
Как передать это значение {$product_info.Price*$currencies[1][3]/$currencies[0][3]} для обработки функцией _formatPrice или для округления средстваи ПХП, не знает ли кто?
(Добавляю результат сегодняшних исследований... блин, в трех шаблонах разные форматы "оформления" категории, аж интересно стало)
Для корректного отображения нужно внести соответствующие правки не только в product_brief.tpl.html, но и в product_detailed, comparison_products и... ну да, в корзине, которая не нужна, а также в прайсе и СПЕЦПРЕДЛОЖЕНИЯХ на главной.
Пока реализованы только "особые выводы цены" в подробном описании товара и в сравнении.
Например, кусок кода для product_detailed:
Здесь почему-то номер категории надо задавать через $categoryID == 130
(в предыдущем примере было, допустим, $product_info.categoryID eq 99 . ХЗ, почему так. По-другому "не видит" условия.)
{$smarty.const.CURRENCY_ASKFORRATE} - это в локали (языковом файле) дополнительно вводим примечание типа "уточните текущий курс у продавца" или как вам надо. Отображается под ценой мелким шрифтом. Можно в локаль и не выносить, писать прямо в шаблоне... но мне ТАК больше нравится и кажется более корректным.
Такое примечание - временная мера (пока не удалось настроить пересчет в ЛЮБУЮ выбранную валюту, чтобы отображало 2 знака после запятой). Но может кому-то пригодиться, если курс вашей валюты часто скачет и сильно влияет на цену.
Как вы уже догадались, вывод сделан и для цен в гривне, и для цен в евро. И при ЛЮБОМ выборе валюты посетителем цены на "спецтовары" (которые фиксированы не в основной валюте, обычно равной доллару) будут отображаться ТОЛЬКО в "своей" валюте. Это существенный минус.
Курс евро $currencies[2][3] берется путем добавления в админке еще одной валюты. [2] - это ее "порядковый номер" - гривна 0, доллар 1, евро 2.
Фишка: вы можете задать индивидуальный курс и евро, и гривни, и вообще чего угодно для КАЖДОЙ ГРУППЫ ТОВАРОВ.
Главное - не перепутайте, что где (например, в админке помечайте - ЕВРО (рога), ЕВРО (копыта), белорусские рубли (картофель)
)
"Скрыть" эти внутренние курсы от посетителя можно с помощью приема, который на этом сайте или на дружественном ему уже упоминали
$currencies.CID eq 5 - а вот здесь уже указываете не порядок, а айдишник валюты. Смотрите по таблице. Так что использовать можно много курсов, а выбирать посетителю разрешить только 2 валюты. Или три. Сколько ВАМ надо.
Теперь чуть поправим сравниловку:
Здесь номер категории отображается как $products.categoryID - опять не знаю, почему так, определено простым перебором форматов.
Пока не удалось реализовать нормальный вывод "специальных цен" для главной страницы-спецпредложений. И главная катастрофа - ПРАЙС.
Что наводит на мысль, что все же надо найти способ втянуть все эти условия в functions.php в функцию show_price.
Кстати, если избавиться от необходимости ДЕЛЕНИЯ на какой-то курс, а ставить множитель для пересчета (например, вместо того чтобы делить на курс 1.4 - умножать на 0.71428...) - мы получим число со столькими знаками после запятой, сколько их в множителе. Т.е. 10*0.71428=7.14280, 10*0.71=7.10 и пр. Но! Если оставить только 2 цифры в множителе (после запятой), то получается очень значительная погрешность. Она не всех может устроить.
В общем, решение нуждается в дальнейшем усовершенствовании. И оставляет желать другого решения.