Перейти к содержанию
ArtemPitov

[Решено] Изобретаем велосипед (стикер процента акционной цены)

Рекомендуемые сообщения

Доброго времени суток, цель сего поста понять правильно ли сделал или можно проще 

 

суть такова, делаю стирке для акцентных товаров с  процентом, получилось как то так 

$special = preg_replace("/[^0-9]*^[.]*[^0-9]/", '', $product['special']);
$price = preg_replace("/[^0-9]*^[.]*[^0-9]/", '', $product['price']);

$procent = (($price/100)-($special/100))*100;

<?php echo $procent; ?>%
не велосипед получился ?  :ugeek:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если это делать в шаблоне, то, наверное, правильно для конкртного, быстрого решения. но не верно для системы в целом.

Опять же... В разных языках, могут быть разные десятичные разделители.

 

Лучше это делать в контроллере, оперируя не приведенными значениями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня в контроллере не получилось получить значения без знака, подскажите логику решения этой задачи в контроллере 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это вчера ночью не выходило ничего в контролере ) щяс все заработало 

$procent = (($result['special'] / 100) - ($result['price']/100))*100;

:eek:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что вы собственно посчитали?

 

$procent = (($result['special'] / 100) - ($result['price']/100))*100 = $result['special'] - $result['price'];

 

В итоге вы получили просто разность цен.

 

Для скидки в процентах надо считать так:

$procent = (1.0 - $result['special'] / $result['price']) * 100.0;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

$this->data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax'))); // отформатированная цена с символом валюты

$this->data['price_wo_currency_symbol'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')), '', false); // отформатированная цена БЕЗ символа валюты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

А что вы собственно посчитали?

 

$procent = (($result['special'] / 100) - ($result['price']/100))*100 = $result['special'] - $result['price'];

 

В итоге вы получили просто разность цен.

 

Для скидки в процентах надо считать так:

$procent = (1.0 - $result['special'] / $result['price']) * 100.0;

ой точно )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
$this->data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax'))); // отформатированная цена с символом валюты

$this->data['price_wo_currency_symbol'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')), '', false); // отформатированная цена БЕЗ символа валюты

А такой вариант имеет право на жизнь  ? 

if ((float)$result['special']) {
$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
$procent = (1.0 - $result['special'] / $result['price']) * 100.0;
} else {
$special = false;
}
Изменено пользователем ArtenPitov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так верно.

Только там где $special = false; надо добавить $procent = false;

 

И передать эту переменную в массив данных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А такой вариант имеет право на жизнь?

только если одна валюта, нет налогов и ничего не будет меняться в этом плане.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

только если одна валюта, нет налогов и ничего не будет меняться в этом плане.

А когда проценты начали зависеть от валюты?

Вопрос же в отображении скидки в виде процентов.

 

С налогами надо всего небольшую правку сделать. Если вообще налоги нужны.

$procent = (1.0 - $this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')) / $this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')) * 100.0;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

только если одна валюта, нет налогов и ничего не будет меняться в этом плане.

А почему со сменой валюты не пойдет ? Все нормально работает, в переменных   $result['price'] и $result['special'] только число 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

А когда проценты начали зависеть от валюты?

Вопрос же в отображении скидки в виде процентов.

 

С налогами надо всего небольшую правку сделать. Если вообще налоги нужны.

$procent = (1.0 - $this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')) / $this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')) * 100.0;

не видел еще не одного интернет магазина с налогами

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.