Форум пользователей Impera CMS
Impera CMS - отличный движок для лёгкого создания интернет магазина.
Обладает невероятным количеством функций, необходимых в онлайн торговле.

Следить
Главная
10:49
27 июл
#
?
Ievgeniy написал:

Добрый день, столкнулся с проблемой отображения 7ми значных цен в магазине яхтенного оборудования. Сайт работает на Impera cms и купленном шаблоне UImaxShop. Подскажите, где єто можно исправить. Сейчас пробелом отделяет только тысячи (см. картинку), надо отделять и миллионы.


12:17
27 июл
#
написал:

Здравствуйте Евгений. Если рассмотреть в шаблоне, как выводится миникарточка товара - например с помощью модуля UImaxShop/html/mod/item-product-2.htm, то там можно увидеть вот такой фрагмент кода:

...
{$priceFinal = $emulator->easyPrice($priceFinal)}

<div class="cen">
    {$priceFinal} {sign}
    ...
</div>
...


Отсюда видно, что некая ранее извлечённая из базы данных финальная цена товара при выводе на экран форматируется с помощью какой-то функции easyPrice, запрограммированной в эмуляторе (хелпере) шаблона.

Тогда лезем посмотреть в файл UImaxShop/html/helper.php - хотим знать, как на самом деле работает функция и почему пробел появляется после трёх разрядов и отсутствует после шестого. Так вот там наблюдаем функцию с таким кодом:

public function easyPrice ( $price ) {
    $price = '' . intval($price);
    return preg_replace('/^([0-9]+)([0-9][0-9][0-9])$/', '$1 $2', $price);
}


Ну да, сборщик шаблона, получается, тут слегка накосячил - регулярное выражение учитывает только ситуацию цен не длинее 6 разрядов. Им в принципе не рассматривался вариант, что будет если ту же страницу станут смотреть в ценах сильно просевшей по курсу валюты. Или шаблон станут использовать в магазине высоких по цене товаров, как в вашем случае.

Исправим баг самым простым, так сказать костыльным образом до 9 разрядов. Перепишем код функции вот так:

public function easyPrice ( $price ) {
    $price = '' . intval($price);
    $price = preg_replace('/^([0-9]+)([0-9]{3})([0-9]{3})$/', '$1 $2 $3', $price);
    return preg_replace('/^([0-9]+)([0-9]{3})$/', '$1 $2', $price);
}


Теперь при выводе цен будет добавляться пробел после 3-его и 6-го разрядов.

10:20
28 июл
#
?
Ievgeniy написал:

Дмитрий, спасибо. Исправил по вашему примеру, отображение цен теперь корректное.

Написание ответа

Перед публикацией рекомендуется использовать Предпросмотр, чтобы увидеть конечный вид сообщения.


Обратите внимание! Для противодействия спаму новые посты форума проявляются с задержкой от нескольких минут, пока не пройдут модерацию.