Как правильно вычесть одну переменную из другой (язык СМАРТИ) ???
#1
Отправлено 15 December 2011 - 03:17 PM
То есть вычитание происходит только по первой цифре. А вычитание из 900р 800р дает правильный результат 100.
Господа в чем дело подскажите ПЛИЗ.
#2
Отправлено 15 December 2011 - 03:52 PM
Господа в чем дело подскажите ПЛИЗ.
в пробеле
я столкнулся с этой проблемой когда делал редактирование заказа в админ панели
при считывании с БД добавляется пробел 5 430р новая 4 950р . при этом все что после него отбрасывается
в итоге нужно подправить функцию вывода в смарти....
вот только я не помню где правил )
#3
Отправлено 15 December 2011 - 07:24 PM
в пробеле
я столкнулся с этой проблемой когда делал редактирование заказа в админ панели
при считывании с БД добавляется пробел 5 430р новая 4 950р . при этом все что после него отбрасывается
в итоге нужно подправить функцию вывода в смарти....
вот только я не помню где правил )
Я понял А как править функцию вывода в смарти. Куда лезть ручками... ?
#4
Отправлено 15 December 2011 - 07:31 PM
---------- Сообщение объединено ----------
это для обычных блоков краткого и подробного описаний, в спецпредложениях надо смотреть, там цена по другому выводиться
#5
Отправлено 15 December 2011 - 10:06 PM
regex_replace | Smarty
дополнительная информация здесь
PHP: Метасимволы - Manual
можно было бы веделить цену, но похоже функция смарти regex_replace не поддерживает замену на подстроку из маски. Ну и как последний вариант без правки php кода магазина это исппользовать фильтры вывода
Фильтры вывода | Smarty
#6
Отправлено 18 December 2011 - 10:12 PM
Тогда результаты не будут зависеть от выбранной валюты. А операции над строками в виде 5 430р и новая 4 950р могут дать правильный результат при знаке валюты справа, а слева уже нет это если использовать такой вариант {$var2-$var1}
#7
Отправлено 18 December 2011 - 10:30 PM
#8
Отправлено 19 December 2011 - 01:01 AM
Решений может быть много. Нужно выбирать более простые и менее затратные.А regex_replace:"/\D/":"" не удалит ВСЕ символы кроме цифровых? Для распространенной ситуации цен без дробной части вполне себе выход, как мне кажется. А потом уже можно спокойно вычитать одно из другого.
Вычетание можно так сделать:
{assign var="per2" value=$cena2|regex_replace:"/\D/":""}
{assign var="per1" value=$cena1|regex_replace:"/\D/":""}
{$per2-$per1} затем завернуть с единицами валюты
или вот так:
{assign var="per2" value=$cena2|show_priceWithOutUnit}
{assign var="per1" value=$cena1|show_priceWithOutUnit}
{$per2-$per1}
Второй вариант проще и менее затратный использует функцию
Завернуть можно к примеру результат так:
{assign var="per3" value=`$per2-$per1`}
{$per3|show_price} - это выведет результат разницы в формате цены
Ну а самый простой как я раньше писал в файле php и вывод результата в шаблон
и если подумать. то возможны варианты
#9
Отправлено 19 December 2011 - 09:51 AM
#10
Отправлено 19 December 2011 - 02:55 PM
regex_replace:"/\D/":"" удалит и точку разделитель целой и дробной части и цена уже будет другая.
Человек хотел для рублей без копеек, для него подойдет. Но я написал и второй вариант, с ним будет порядок с разрядностью. Все сделает специально предназначенная функция
#11
Отправлено 19 December 2011 - 02:56 PM
regex_replace:"/\D/":"" удалит и точку разделитель целой и дробной части и цена уже будет другая.
Для распространенной ситуации цен без дробной части
#12
Отправлено 19 December 2011 - 05:07 PM
#13
Отправлено 17 February 2012 - 06:35 PM
Я тоже с такой проблемой сталкивался, нашел такое решение. все дело в функции _formatPrice, если изменить немного объявление для смарти, будет все ОК:Как правильно вычесть одну переменную из другой (язык СМАРТИ) ???
Например мне нужно значение order_amount в нормальном виде, вот ф-ция которая делает из 4000 -> 4 000:
$smarty_mail->assign( "order_amount", _formatPrice(roundf($order["currency_value"]*$order["order_amount"]),$order["currency_round"]));
Я делал так, оставлял эту же без изменений и просто создавал новую:
$smarty_mail->assign( "order_amount_for_me", roundf($order["currency_value"]*$order["order_amount"],$order["currency_round"]));
#14
Отправлено 17 February 2012 - 07:02 PM
Надо бы определиться - либо у Вас штатная PHP-функция round(), которая имеет два входных параметра - число и округление, либо roundf() из functions.php, которая имеет один входной параметр:Я делал так, оставлял эту же без изменений и просто создавал новую:
$smarty_mail->assign( "order_amount_for_me", roundf($order["currency_value"]*$order["order_amount"],$order["currency_round"]));
function roundf($float_value)
{
return round(100 * $float_value) / 100;
}
Это в 3.1.2, но в Вашей наверняка ведь так же .