den4ikm Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Приветствую, форумчане! Прошу помощи в решении специфичной задачи: Нужно убрать в отображении цены на сайте цифр после запятой (и саму запятую) в случае если эти цыфры = .00 Дело в том, что в магазине есть несколько товаров ценой с копейками. Соответственно в настройках цены стоит: округлять до 2-х знаков после запятой. Но подавляющее число товаров с ценой в рублях (без копеек). И получается что цены вида рр.00, что не очень эстетично и в ряде мест не помещается из-за длинны. Как я понимаю, настройки округления цены нельзя разделить между категориями и товарами? Надіслати Поділитися на інших сайтах More sharing options...
splka Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 руками допиливтаь round(); Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Спасибо за ответ а про напильник подробнее, хотя бы навскидку? Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Саму функцию чтобы убрать думаю такую использовать: rtrim($text, ".00"); либо регулярку а вот где это искать - вопрос Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 ceil ceil - округляет дроби в сторону увеличения. Описание float ceil (float value) Возвращает следующее ближайшее целочисленное значение путём округления value, если это необходимо. return-значение ceil() сохраняет тип float, так как диапазон значений float обычно больше, чем у integer. Пример 1. ceil() echo ceil(4.3); // 5 echo ceil(9.999); // 10 Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Похоже вы не так поняли, округление не нужно: Есть 2 вида цен: 123.45 ‘нужно оставить как есть’ 123.00 ‘нужно избавить от нулей’ Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 28 минут назад, den4ikm сказал: rtrim($text, ".00"); Это ппц Читайте документацию Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 1 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 str_replace('.00','' Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 55 минут назад, den4ikm сказал: 123.00 ‘нужно избавить от нулей’ Тогда $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); Это уберет все после точки, в отличие от str_replace('.00','' Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 6 минут назад, esculapra сказал: $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 (змінено) А можно еще так if(strpos($cost,'.00')>0){ $cost = substr($cost,0,strpos($cost,'.')-1); } Змінено 1 грудня 2019 користувачем esculapra Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Есть еще один коварный метод $a = explode('.',$cost): if($a[1]=='000') $cost = $a[0]; Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Спасибо всем за варианты, буду пробовать 1 час назад, chukcha сказал: str_replace('.00','' Не понял это выражение ( 22 минуты назад, esculapra сказал: Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Нет, возможны только два знака после запятой (установлено в настройках) Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 2 минуты назад, den4ikm сказал: Не понял это выражение То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); если только 2 нуля, тогда if(preg_match('/(\.){1}(0){2}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } Попробуй мой метод с массивом - там четко сработает. Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Только что, esculapra сказал: Попробуй мой метод с массивом - там четко сработает. Сам алгоритм таков: - переменная переносится в массив с двумя значениями - проверяется число после точки, и если это не нули, то ничего не делает, иначе в переменную заносится только целочисленное значение. Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 1 час назад, esculapra сказал: То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); Выберу это, регулярки я вообще не понимаю. Благодарю за помощь Надіслати Поділитися на інших сайтах More sharing options... 2 months later... den4ikm Опубліковано: 25 лютого 2020 Автор Share Опубліковано: 25 лютого 2020 (змінено) В связи с вопросами в личку выкладываю итоговое решение: /system/library/cart/currency.php public function format($number, $currency, $value = '', $format = true) { $symbol_left = $this->currencies[$currency]['symbol_left']; $symbol_right = $this->currencies[$currency]['symbol_right']; $decimal_place = $this->currencies[$currency]['decimal_place']; if (!$value) { $value = $this->currencies[$currency]['value']; } $amount = $value ? (float)$number * $value : (float)$number; $amount = round($amount, (int)$decimal_place); if (!$format) { return $amount; } $string = ''; if ($symbol_left) { $string .= $symbol_left; } $string .= number_format($amount, (int)$decimal_place, $this->language->get('decimal_point'), $this->language->get('thousand_point')); $string = str_replace('.00','',$string); if ($symbol_right) { $string .= $symbol_right; } return $string; } Использовалось на версии OC 2.3.0.2.3 Еще раз спасибо , @AlexDW ,@esculapra,@chukcha Змінено 25 лютого 2020 користувачем den4ikm Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація Убрать нули в цене (опять, но не совсем) Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення PRICE MASTER - Модуль імпорту/експорту товарів, парсинг, переклад, генерація текстів, редактор каталогу та багато іншого Автор: ScriptBrains 1.0 Синхронізація Замовлень Rozetka.ua та Opencart Автор: sinco Product Manipulator Автор: Hiperlynx007 Видалення дублікатів товарів для OpenCart Автор: Hatshypsut Вибір категорій і виробників для "Знайшли дешевше" шаблону Upstore Автор: Flint2000 × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Спасибо за ответ а про напильник подробнее, хотя бы навскидку? Надіслати Поділитися на інших сайтах More sharing options...
den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Саму функцию чтобы убрать думаю такую использовать: rtrim($text, ".00"); либо регулярку а вот где это искать - вопрос Надіслати Поділитися на інших сайтах More sharing options...
esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 ceil ceil - округляет дроби в сторону увеличения. Описание float ceil (float value) Возвращает следующее ближайшее целочисленное значение путём округления value, если это необходимо. return-значение ceil() сохраняет тип float, так как диапазон значений float обычно больше, чем у integer. Пример 1. ceil() echo ceil(4.3); // 5 echo ceil(9.999); // 10 Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Похоже вы не так поняли, округление не нужно: Есть 2 вида цен: 123.45 ‘нужно оставить как есть’ 123.00 ‘нужно избавить от нулей’ Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 28 минут назад, den4ikm сказал: rtrim($text, ".00"); Это ппц Читайте документацию Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 1 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 str_replace('.00','' Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 55 минут назад, den4ikm сказал: 123.00 ‘нужно избавить от нулей’ Тогда $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); Это уберет все после точки, в отличие от str_replace('.00','' Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 6 минут назад, esculapra сказал: $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 (змінено) А можно еще так if(strpos($cost,'.00')>0){ $cost = substr($cost,0,strpos($cost,'.')-1); } Змінено 1 грудня 2019 користувачем esculapra Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Есть еще один коварный метод $a = explode('.',$cost): if($a[1]=='000') $cost = $a[0]; Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Спасибо всем за варианты, буду пробовать 1 час назад, chukcha сказал: str_replace('.00','' Не понял это выражение ( 22 минуты назад, esculapra сказал: Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Нет, возможны только два знака после запятой (установлено в настройках) Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 2 минуты назад, den4ikm сказал: Не понял это выражение То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); если только 2 нуля, тогда if(preg_match('/(\.){1}(0){2}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } Попробуй мой метод с массивом - там четко сработает. Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Только что, esculapra сказал: Попробуй мой метод с массивом - там четко сработает. Сам алгоритм таков: - переменная переносится в массив с двумя значениями - проверяется число после точки, и если это не нули, то ничего не делает, иначе в переменную заносится только целочисленное значение. Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 1 час назад, esculapra сказал: То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); Выберу это, регулярки я вообще не понимаю. Благодарю за помощь Надіслати Поділитися на інших сайтах More sharing options... 2 months later... den4ikm Опубліковано: 25 лютого 2020 Автор Share Опубліковано: 25 лютого 2020 (змінено) В связи с вопросами в личку выкладываю итоговое решение: /system/library/cart/currency.php public function format($number, $currency, $value = '', $format = true) { $symbol_left = $this->currencies[$currency]['symbol_left']; $symbol_right = $this->currencies[$currency]['symbol_right']; $decimal_place = $this->currencies[$currency]['decimal_place']; if (!$value) { $value = $this->currencies[$currency]['value']; } $amount = $value ? (float)$number * $value : (float)$number; $amount = round($amount, (int)$decimal_place); if (!$format) { return $amount; } $string = ''; if ($symbol_left) { $string .= $symbol_left; } $string .= number_format($amount, (int)$decimal_place, $this->language->get('decimal_point'), $this->language->get('thousand_point')); $string = str_replace('.00','',$string); if ($symbol_right) { $string .= $symbol_right; } return $string; } Использовалось на версии OC 2.3.0.2.3 Еще раз спасибо , @AlexDW ,@esculapra,@chukcha Змінено 25 лютого 2020 користувачем den4ikm Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація Убрать нули в цене (опять, но не совсем) Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення PRICE MASTER - Модуль імпорту/експорту товарів, парсинг, переклад, генерація текстів, редактор каталогу та багато іншого Автор: ScriptBrains 1.0 Синхронізація Замовлень Rozetka.ua та Opencart Автор: sinco Product Manipulator Автор: Hiperlynx007 Видалення дублікатів товарів для OpenCart Автор: Hatshypsut Вибір категорій і виробників для "Знайшли дешевше" шаблону Upstore Автор: Flint2000 × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Похоже вы не так поняли, округление не нужно: Есть 2 вида цен: 123.45 ‘нужно оставить как есть’ 123.00 ‘нужно избавить от нулей’ Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 28 минут назад, den4ikm сказал: rtrim($text, ".00"); Это ппц Читайте документацию Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 1 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 str_replace('.00','' Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 55 минут назад, den4ikm сказал: 123.00 ‘нужно избавить от нулей’ Тогда $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); Это уберет все после точки, в отличие от str_replace('.00','' Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 6 минут назад, esculapra сказал: $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 (змінено) А можно еще так if(strpos($cost,'.00')>0){ $cost = substr($cost,0,strpos($cost,'.')-1); } Змінено 1 грудня 2019 користувачем esculapra Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Есть еще один коварный метод $a = explode('.',$cost): if($a[1]=='000') $cost = $a[0]; Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Спасибо всем за варианты, буду пробовать 1 час назад, chukcha сказал: str_replace('.00','' Не понял это выражение ( 22 минуты назад, esculapra сказал: Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Нет, возможны только два знака после запятой (установлено в настройках) Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 2 минуты назад, den4ikm сказал: Не понял это выражение То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); если только 2 нуля, тогда if(preg_match('/(\.){1}(0){2}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } Попробуй мой метод с массивом - там четко сработает. Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Только что, esculapra сказал: Попробуй мой метод с массивом - там четко сработает. Сам алгоритм таков: - переменная переносится в массив с двумя значениями - проверяется число после точки, и если это не нули, то ничего не делает, иначе в переменную заносится только целочисленное значение. Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 1 час назад, esculapra сказал: То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); Выберу это, регулярки я вообще не понимаю. Благодарю за помощь Надіслати Поділитися на інших сайтах More sharing options... 2 months later... den4ikm Опубліковано: 25 лютого 2020 Автор Share Опубліковано: 25 лютого 2020 (змінено) В связи с вопросами в личку выкладываю итоговое решение: /system/library/cart/currency.php public function format($number, $currency, $value = '', $format = true) { $symbol_left = $this->currencies[$currency]['symbol_left']; $symbol_right = $this->currencies[$currency]['symbol_right']; $decimal_place = $this->currencies[$currency]['decimal_place']; if (!$value) { $value = $this->currencies[$currency]['value']; } $amount = $value ? (float)$number * $value : (float)$number; $amount = round($amount, (int)$decimal_place); if (!$format) { return $amount; } $string = ''; if ($symbol_left) { $string .= $symbol_left; } $string .= number_format($amount, (int)$decimal_place, $this->language->get('decimal_point'), $this->language->get('thousand_point')); $string = str_replace('.00','',$string); if ($symbol_right) { $string .= $symbol_right; } return $string; } Использовалось на версии OC 2.3.0.2.3 Еще раз спасибо , @AlexDW ,@esculapra,@chukcha Змінено 25 лютого 2020 користувачем den4ikm Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація Убрать нули в цене (опять, но не совсем) Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення PRICE MASTER - Модуль імпорту/експорту товарів, парсинг, переклад, генерація текстів, редактор каталогу та багато іншого Автор: ScriptBrains 1.0 Синхронізація Замовлень Rozetka.ua та Opencart Автор: sinco Product Manipulator Автор: Hiperlynx007 Видалення дублікатів товарів для OpenCart Автор: Hatshypsut Вибір категорій і виробників для "Знайшли дешевше" шаблону Upstore Автор: Flint2000 × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
AlexDW Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 1 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 str_replace('.00','' Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 55 минут назад, den4ikm сказал: 123.00 ‘нужно избавить от нулей’ Тогда $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); Это уберет все после точки, в отличие от str_replace('.00','' Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 6 минут назад, esculapra сказал: $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 (змінено) А можно еще так if(strpos($cost,'.00')>0){ $cost = substr($cost,0,strpos($cost,'.')-1); } Змінено 1 грудня 2019 користувачем esculapra Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Есть еще один коварный метод $a = explode('.',$cost): if($a[1]=='000') $cost = $a[0]; Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Спасибо всем за варианты, буду пробовать 1 час назад, chukcha сказал: str_replace('.00','' Не понял это выражение ( 22 минуты назад, esculapra сказал: Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Нет, возможны только два знака после запятой (установлено в настройках) Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 2 минуты назад, den4ikm сказал: Не понял это выражение То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); если только 2 нуля, тогда if(preg_match('/(\.){1}(0){2}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } Попробуй мой метод с массивом - там четко сработает. Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Только что, esculapra сказал: Попробуй мой метод с массивом - там четко сработает. Сам алгоритм таков: - переменная переносится в массив с двумя значениями - проверяется число после точки, и если это не нули, то ничего не делает, иначе в переменную заносится только целочисленное значение. Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 1 час назад, esculapra сказал: То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); Выберу это, регулярки я вообще не понимаю. Благодарю за помощь Надіслати Поділитися на інших сайтах More sharing options... 2 months later... den4ikm Опубліковано: 25 лютого 2020 Автор Share Опубліковано: 25 лютого 2020 (змінено) В связи с вопросами в личку выкладываю итоговое решение: /system/library/cart/currency.php public function format($number, $currency, $value = '', $format = true) { $symbol_left = $this->currencies[$currency]['symbol_left']; $symbol_right = $this->currencies[$currency]['symbol_right']; $decimal_place = $this->currencies[$currency]['decimal_place']; if (!$value) { $value = $this->currencies[$currency]['value']; } $amount = $value ? (float)$number * $value : (float)$number; $amount = round($amount, (int)$decimal_place); if (!$format) { return $amount; } $string = ''; if ($symbol_left) { $string .= $symbol_left; } $string .= number_format($amount, (int)$decimal_place, $this->language->get('decimal_point'), $this->language->get('thousand_point')); $string = str_replace('.00','',$string); if ($symbol_right) { $string .= $symbol_right; } return $string; } Использовалось на версии OC 2.3.0.2.3 Еще раз спасибо , @AlexDW ,@esculapra,@chukcha Змінено 25 лютого 2020 користувачем den4ikm Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація Убрать нули в цене (опять, но не совсем) Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення PRICE MASTER - Модуль імпорту/експорту товарів, парсинг, переклад, генерація текстів, редактор каталогу та багато іншого Автор: ScriptBrains 1.0 Синхронізація Замовлень Rozetka.ua та Opencart Автор: sinco Product Manipulator Автор: Hiperlynx007 Видалення дублікатів товарів для OpenCart Автор: Hatshypsut Вибір категорій і виробників для "Знайшли дешевше" шаблону Upstore Автор: Flint2000 × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
chukcha Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 str_replace('.00','' Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 55 минут назад, den4ikm сказал: 123.00 ‘нужно избавить от нулей’ Тогда $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); Это уберет все после точки, в отличие от str_replace('.00','' Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 6 минут назад, esculapra сказал: $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 (змінено) А можно еще так if(strpos($cost,'.00')>0){ $cost = substr($cost,0,strpos($cost,'.')-1); } Змінено 1 грудня 2019 користувачем esculapra Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Есть еще один коварный метод $a = explode('.',$cost): if($a[1]=='000') $cost = $a[0]; Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Спасибо всем за варианты, буду пробовать 1 час назад, chukcha сказал: str_replace('.00','' Не понял это выражение ( 22 минуты назад, esculapra сказал: Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Нет, возможны только два знака после запятой (установлено в настройках) Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 2 минуты назад, den4ikm сказал: Не понял это выражение То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); если только 2 нуля, тогда if(preg_match('/(\.){1}(0){2}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } Попробуй мой метод с массивом - там четко сработает. Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Только что, esculapra сказал: Попробуй мой метод с массивом - там четко сработает. Сам алгоритм таков: - переменная переносится в массив с двумя значениями - проверяется число после точки, и если это не нули, то ничего не делает, иначе в переменную заносится только целочисленное значение. Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 1 час назад, esculapra сказал: То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); Выберу это, регулярки я вообще не понимаю. Благодарю за помощь Надіслати Поділитися на інших сайтах More sharing options... 2 months later... den4ikm Опубліковано: 25 лютого 2020 Автор Share Опубліковано: 25 лютого 2020 (змінено) В связи с вопросами в личку выкладываю итоговое решение: /system/library/cart/currency.php public function format($number, $currency, $value = '', $format = true) { $symbol_left = $this->currencies[$currency]['symbol_left']; $symbol_right = $this->currencies[$currency]['symbol_right']; $decimal_place = $this->currencies[$currency]['decimal_place']; if (!$value) { $value = $this->currencies[$currency]['value']; } $amount = $value ? (float)$number * $value : (float)$number; $amount = round($amount, (int)$decimal_place); if (!$format) { return $amount; } $string = ''; if ($symbol_left) { $string .= $symbol_left; } $string .= number_format($amount, (int)$decimal_place, $this->language->get('decimal_point'), $this->language->get('thousand_point')); $string = str_replace('.00','',$string); if ($symbol_right) { $string .= $symbol_right; } return $string; } Использовалось на версии OC 2.3.0.2.3 Еще раз спасибо , @AlexDW ,@esculapra,@chukcha Змінено 25 лютого 2020 користувачем den4ikm Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація Убрать нули в цене (опять, но не совсем) Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення PRICE MASTER - Модуль імпорту/експорту товарів, парсинг, переклад, генерація текстів, редактор каталогу та багато іншого Автор: ScriptBrains 1.0 Синхронізація Замовлень Rozetka.ua та Opencart Автор: sinco Product Manipulator Автор: Hiperlynx007 Видалення дублікатів товарів для OpenCart Автор: Hatshypsut Вибір категорій і виробників для "Знайшли дешевше" шаблону Upstore Автор: Flint2000 × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 55 минут назад, den4ikm сказал: 123.00 ‘нужно избавить от нулей’ Тогда $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); Это уберет все после точки, в отличие от str_replace('.00','' Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 6 минут назад, esculapra сказал: $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 (змінено) А можно еще так if(strpos($cost,'.00')>0){ $cost = substr($cost,0,strpos($cost,'.')-1); } Змінено 1 грудня 2019 користувачем esculapra Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Есть еще один коварный метод $a = explode('.',$cost): if($a[1]=='000') $cost = $a[0]; Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Спасибо всем за варианты, буду пробовать 1 час назад, chukcha сказал: str_replace('.00','' Не понял это выражение ( 22 минуты назад, esculapra сказал: Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Нет, возможны только два знака после запятой (установлено в настройках) Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 2 минуты назад, den4ikm сказал: Не понял это выражение То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); если только 2 нуля, тогда if(preg_match('/(\.){1}(0){2}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } Попробуй мой метод с массивом - там четко сработает. Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Только что, esculapra сказал: Попробуй мой метод с массивом - там четко сработает. Сам алгоритм таков: - переменная переносится в массив с двумя значениями - проверяется число после точки, и если это не нули, то ничего не делает, иначе в переменную заносится только целочисленное значение. Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 1 час назад, esculapra сказал: То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); Выберу это, регулярки я вообще не понимаю. Благодарю за помощь Надіслати Поділитися на інших сайтах More sharing options... 2 months later... den4ikm Опубліковано: 25 лютого 2020 Автор Share Опубліковано: 25 лютого 2020 (змінено) В связи с вопросами в личку выкладываю итоговое решение: /system/library/cart/currency.php public function format($number, $currency, $value = '', $format = true) { $symbol_left = $this->currencies[$currency]['symbol_left']; $symbol_right = $this->currencies[$currency]['symbol_right']; $decimal_place = $this->currencies[$currency]['decimal_place']; if (!$value) { $value = $this->currencies[$currency]['value']; } $amount = $value ? (float)$number * $value : (float)$number; $amount = round($amount, (int)$decimal_place); if (!$format) { return $amount; } $string = ''; if ($symbol_left) { $string .= $symbol_left; } $string .= number_format($amount, (int)$decimal_place, $this->language->get('decimal_point'), $this->language->get('thousand_point')); $string = str_replace('.00','',$string); if ($symbol_right) { $string .= $symbol_right; } return $string; } Использовалось на версии OC 2.3.0.2.3 Еще раз спасибо , @AlexDW ,@esculapra,@chukcha Змінено 25 лютого 2020 користувачем den4ikm Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація Убрать нули в цене (опять, но не совсем) Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення PRICE MASTER - Модуль імпорту/експорту товарів, парсинг, переклад, генерація текстів, редактор каталогу та багато іншого Автор: ScriptBrains 1.0 Синхронізація Замовлень Rozetka.ua та Opencart Автор: sinco Product Manipulator Автор: Hiperlynx007 Видалення дублікатів товарів для OpenCart Автор: Hatshypsut Вибір категорій і виробників для "Знайшли дешевше" шаблону Upstore Автор: Flint2000 × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 6 минут назад, esculapra сказал: $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 (змінено) А можно еще так if(strpos($cost,'.00')>0){ $cost = substr($cost,0,strpos($cost,'.')-1); } Змінено 1 грудня 2019 користувачем esculapra Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Есть еще один коварный метод $a = explode('.',$cost): if($a[1]=='000') $cost = $a[0]; Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Спасибо всем за варианты, буду пробовать 1 час назад, chukcha сказал: str_replace('.00','' Не понял это выражение ( 22 минуты назад, esculapra сказал: Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Нет, возможны только два знака после запятой (установлено в настройках) Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 2 минуты назад, den4ikm сказал: Не понял это выражение То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); если только 2 нуля, тогда if(preg_match('/(\.){1}(0){2}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } Попробуй мой метод с массивом - там четко сработает. Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Только что, esculapra сказал: Попробуй мой метод с массивом - там четко сработает. Сам алгоритм таков: - переменная переносится в массив с двумя значениями - проверяется число после точки, и если это не нули, то ничего не делает, иначе в переменную заносится только целочисленное значение. Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 1 час назад, esculapra сказал: То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); Выберу это, регулярки я вообще не понимаю. Благодарю за помощь Надіслати Поділитися на інших сайтах More sharing options... 2 months later... den4ikm Опубліковано: 25 лютого 2020 Автор Share Опубліковано: 25 лютого 2020 (змінено) В связи с вопросами в личку выкладываю итоговое решение: /system/library/cart/currency.php public function format($number, $currency, $value = '', $format = true) { $symbol_left = $this->currencies[$currency]['symbol_left']; $symbol_right = $this->currencies[$currency]['symbol_right']; $decimal_place = $this->currencies[$currency]['decimal_place']; if (!$value) { $value = $this->currencies[$currency]['value']; } $amount = $value ? (float)$number * $value : (float)$number; $amount = round($amount, (int)$decimal_place); if (!$format) { return $amount; } $string = ''; if ($symbol_left) { $string .= $symbol_left; } $string .= number_format($amount, (int)$decimal_place, $this->language->get('decimal_point'), $this->language->get('thousand_point')); $string = str_replace('.00','',$string); if ($symbol_right) { $string .= $symbol_right; } return $string; } Использовалось на версии OC 2.3.0.2.3 Еще раз спасибо , @AlexDW ,@esculapra,@chukcha Змінено 25 лютого 2020 користувачем den4ikm Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація Убрать нули в цене (опять, но не совсем) Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення PRICE MASTER - Модуль імпорту/експорту товарів, парсинг, переклад, генерація текстів, редактор каталогу та багато іншого Автор: ScriptBrains 1.0 Синхронізація Замовлень Rozetka.ua та Opencart Автор: sinco Product Manipulator Автор: Hiperlynx007 Видалення дублікатів товарів для OpenCart Автор: Hatshypsut Вибір категорій і виробників для "Знайшли дешевше" шаблону Upstore Автор: Flint2000 × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 (змінено) А можно еще так if(strpos($cost,'.00')>0){ $cost = substr($cost,0,strpos($cost,'.')-1); } Змінено 1 грудня 2019 користувачем esculapra Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Есть еще один коварный метод $a = explode('.',$cost): if($a[1]=='000') $cost = $a[0]; Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Спасибо всем за варианты, буду пробовать 1 час назад, chukcha сказал: str_replace('.00','' Не понял это выражение ( 22 минуты назад, esculapra сказал: Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Нет, возможны только два знака после запятой (установлено в настройках) Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 2 минуты назад, den4ikm сказал: Не понял это выражение То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); если только 2 нуля, тогда if(preg_match('/(\.){1}(0){2}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } Попробуй мой метод с массивом - там четко сработает. Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Только что, esculapra сказал: Попробуй мой метод с массивом - там четко сработает. Сам алгоритм таков: - переменная переносится в массив с двумя значениями - проверяется число после точки, и если это не нули, то ничего не делает, иначе в переменную заносится только целочисленное значение. Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 1 час назад, esculapra сказал: То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); Выберу это, регулярки я вообще не понимаю. Благодарю за помощь Надіслати Поділитися на інших сайтах More sharing options... 2 months later... den4ikm Опубліковано: 25 лютого 2020 Автор Share Опубліковано: 25 лютого 2020 (змінено) В связи с вопросами в личку выкладываю итоговое решение: /system/library/cart/currency.php public function format($number, $currency, $value = '', $format = true) { $symbol_left = $this->currencies[$currency]['symbol_left']; $symbol_right = $this->currencies[$currency]['symbol_right']; $decimal_place = $this->currencies[$currency]['decimal_place']; if (!$value) { $value = $this->currencies[$currency]['value']; } $amount = $value ? (float)$number * $value : (float)$number; $amount = round($amount, (int)$decimal_place); if (!$format) { return $amount; } $string = ''; if ($symbol_left) { $string .= $symbol_left; } $string .= number_format($amount, (int)$decimal_place, $this->language->get('decimal_point'), $this->language->get('thousand_point')); $string = str_replace('.00','',$string); if ($symbol_right) { $string .= $symbol_right; } return $string; } Использовалось на версии OC 2.3.0.2.3 Еще раз спасибо , @AlexDW ,@esculapra,@chukcha Змінено 25 лютого 2020 користувачем den4ikm Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація Убрать нули в цене (опять, но не совсем) Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення PRICE MASTER - Модуль імпорту/експорту товарів, парсинг, переклад, генерація текстів, редактор каталогу та багато іншого Автор: ScriptBrains 1.0 Синхронізація Замовлень Rozetka.ua та Opencart Автор: sinco Product Manipulator Автор: Hiperlynx007 Видалення дублікатів товарів для OpenCart Автор: Hatshypsut Вибір категорій і виробників для "Знайшли дешевше" шаблону Upstore Автор: Flint2000
esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Есть еще один коварный метод $a = explode('.',$cost): if($a[1]=='000') $cost = $a[0]; Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Спасибо всем за варианты, буду пробовать 1 час назад, chukcha сказал: str_replace('.00','' Не понял это выражение ( 22 минуты назад, esculapra сказал: Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Нет, возможны только два знака после запятой (установлено в настройках) Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 2 минуты назад, den4ikm сказал: Не понял это выражение То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); если только 2 нуля, тогда if(preg_match('/(\.){1}(0){2}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } Попробуй мой метод с массивом - там четко сработает. Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Только что, esculapra сказал: Попробуй мой метод с массивом - там четко сработает. Сам алгоритм таков: - переменная переносится в массив с двумя значениями - проверяется число после точки, и если это не нули, то ничего не делает, иначе в переменную заносится только целочисленное значение. Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 1 час назад, esculapra сказал: То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); Выберу это, регулярки я вообще не понимаю. Благодарю за помощь Надіслати Поділитися на інших сайтах More sharing options... 2 months later... den4ikm Опубліковано: 25 лютого 2020 Автор Share Опубліковано: 25 лютого 2020 (змінено) В связи с вопросами в личку выкладываю итоговое решение: /system/library/cart/currency.php public function format($number, $currency, $value = '', $format = true) { $symbol_left = $this->currencies[$currency]['symbol_left']; $symbol_right = $this->currencies[$currency]['symbol_right']; $decimal_place = $this->currencies[$currency]['decimal_place']; if (!$value) { $value = $this->currencies[$currency]['value']; } $amount = $value ? (float)$number * $value : (float)$number; $amount = round($amount, (int)$decimal_place); if (!$format) { return $amount; } $string = ''; if ($symbol_left) { $string .= $symbol_left; } $string .= number_format($amount, (int)$decimal_place, $this->language->get('decimal_point'), $this->language->get('thousand_point')); $string = str_replace('.00','',$string); if ($symbol_right) { $string .= $symbol_right; } return $string; } Использовалось на версии OC 2.3.0.2.3 Еще раз спасибо , @AlexDW ,@esculapra,@chukcha Змінено 25 лютого 2020 користувачем den4ikm Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація Убрать нули в цене (опять, но не совсем)
den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 Спасибо всем за варианты, буду пробовать 1 час назад, chukcha сказал: str_replace('.00','' Не понял это выражение ( 22 минуты назад, esculapra сказал: Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } как я понял, после точки могут идти 3 нуля Нет, возможны только два знака после запятой (установлено в настройках) Надіслати Поділитися на інших сайтах More sharing options...
esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 2 минуты назад, den4ikm сказал: Не понял это выражение То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); если только 2 нуля, тогда if(preg_match('/(\.){1}(0){2}/i',$cost)) { $cost = preg_replace('/(\.){1}(\d)++/i','',$cost); } Попробуй мой метод с массивом - там четко сработает. Надіслати Поділитися на інших сайтах More sharing options... esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Только что, esculapra сказал: Попробуй мой метод с массивом - там четко сработает. Сам алгоритм таков: - переменная переносится в массив с двумя значениями - проверяется число после точки, и если это не нули, то ничего не делает, иначе в переменную заносится только целочисленное значение. Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 1 час назад, esculapra сказал: То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); Выберу это, регулярки я вообще не понимаю. Благодарю за помощь Надіслати Поділитися на інших сайтах More sharing options... 2 months later... den4ikm Опубліковано: 25 лютого 2020 Автор Share Опубліковано: 25 лютого 2020 (змінено) В связи с вопросами в личку выкладываю итоговое решение: /system/library/cart/currency.php public function format($number, $currency, $value = '', $format = true) { $symbol_left = $this->currencies[$currency]['symbol_left']; $symbol_right = $this->currencies[$currency]['symbol_right']; $decimal_place = $this->currencies[$currency]['decimal_place']; if (!$value) { $value = $this->currencies[$currency]['value']; } $amount = $value ? (float)$number * $value : (float)$number; $amount = round($amount, (int)$decimal_place); if (!$format) { return $amount; } $string = ''; if ($symbol_left) { $string .= $symbol_left; } $string .= number_format($amount, (int)$decimal_place, $this->language->get('decimal_point'), $this->language->get('thousand_point')); $string = str_replace('.00','',$string); if ($symbol_right) { $string .= $symbol_right; } return $string; } Использовалось на версии OC 2.3.0.2.3 Еще раз спасибо , @AlexDW ,@esculapra,@chukcha Змінено 25 лютого 2020 користувачем den4ikm Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
esculapra Опубліковано: 1 грудня 2019 Share Опубліковано: 1 грудня 2019 Только что, esculapra сказал: Попробуй мой метод с массивом - там четко сработает. Сам алгоритм таков: - переменная переносится в массив с двумя значениями - проверяется число после точки, и если это не нули, то ничего не делает, иначе в переменную заносится только целочисленное значение. Надіслати Поділитися на інших сайтах More sharing options... den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 1 час назад, esculapra сказал: То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); Выберу это, регулярки я вообще не понимаю. Благодарю за помощь Надіслати Поділитися на інших сайтах More sharing options... 2 months later... den4ikm Опубліковано: 25 лютого 2020 Автор Share Опубліковано: 25 лютого 2020 (змінено) В связи с вопросами в личку выкладываю итоговое решение: /system/library/cart/currency.php public function format($number, $currency, $value = '', $format = true) { $symbol_left = $this->currencies[$currency]['symbol_left']; $symbol_right = $this->currencies[$currency]['symbol_right']; $decimal_place = $this->currencies[$currency]['decimal_place']; if (!$value) { $value = $this->currencies[$currency]['value']; } $amount = $value ? (float)$number * $value : (float)$number; $amount = round($amount, (int)$decimal_place); if (!$format) { return $amount; } $string = ''; if ($symbol_left) { $string .= $symbol_left; } $string .= number_format($amount, (int)$decimal_place, $this->language->get('decimal_point'), $this->language->get('thousand_point')); $string = str_replace('.00','',$string); if ($symbol_right) { $string .= $symbol_right; } return $string; } Использовалось на версии OC 2.3.0.2.3 Еще раз спасибо , @AlexDW ,@esculapra,@chukcha Змінено 25 лютого 2020 користувачем den4ikm Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
den4ikm Опубліковано: 1 грудня 2019 Автор Share Опубліковано: 1 грудня 2019 1 час назад, esculapra сказал: То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost); Выберу это, регулярки я вообще не понимаю. Благодарю за помощь Надіслати Поділитися на інших сайтах More sharing options...
den4ikm Опубліковано: 25 лютого 2020 Автор Share Опубліковано: 25 лютого 2020 (змінено) В связи с вопросами в личку выкладываю итоговое решение: /system/library/cart/currency.php public function format($number, $currency, $value = '', $format = true) { $symbol_left = $this->currencies[$currency]['symbol_left']; $symbol_right = $this->currencies[$currency]['symbol_right']; $decimal_place = $this->currencies[$currency]['decimal_place']; if (!$value) { $value = $this->currencies[$currency]['value']; } $amount = $value ? (float)$number * $value : (float)$number; $amount = round($amount, (int)$decimal_place); if (!$format) { return $amount; } $string = ''; if ($symbol_left) { $string .= $symbol_left; } $string .= number_format($amount, (int)$decimal_place, $this->language->get('decimal_point'), $this->language->get('thousand_point')); $string = str_replace('.00','',$string); if ($symbol_right) { $string .= $symbol_right; } return $string; } Использовалось на версии OC 2.3.0.2.3 Еще раз спасибо , @AlexDW ,@esculapra,@chukcha Змінено 25 лютого 2020 користувачем den4ikm Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts