как производится расчет цены в opencart - PullRequest
1 голос
/ 09 ноября 2011

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

$price = $this->currency->format($this->tax->calculate($result['price'], 
        $result['tax_class_id'], $this->config->get('config_tax')));
if ((float)$result['special']) {
    $special = $this->currency->format($this->tax->calculate(
        $result['special'], 
        $result['tax_class_id'], $this->config->get('config_tax')));
} else {
    $special = false;
}                       
if ($this->config->get('config_tax')) {
    $tax = $this->currency->format((float)$result['special'] ? 
           $result['special'] : $result['price']);
} else {
    $tax = false;
}

На самом деле я не понял, что здесь на самом деле происходит, так как я вижу, что между $price и $special и $tax действительно нет никакой разницы, но должна быть причина, почему это реализовано так способ.

Я уверен, что мне здесь чего-то не хватает, кто-нибудь мне объяснит, как производится расчет цены в opencart?

Ответы [ 2 ]

4 голосов
/ 09 ноября 2011

Из чтения источника я понимаю следующее: $price, $special и $tax - это переменные, которые передаются в представление для отображения.

$price = $this->currency->format($this->tax->calculate($result['price'], 
        $result['tax_class_id'], $this->config->get('config_tax')));

Каждый пункт имеет цену, поэтому $price всегда установлен.$price есть;базовая цена с учетом применимых налоговых классов и применяемого налога.

if ((float)$result['special']) {
    $special = $this->currency->format($this->tax->calculate(
        $result['special'], 
        $result['tax_class_id'], $this->config->get('config_tax')));
} else {
    $special = false;
}                       

Товар может быть специальным.Если это так, тогда $special устанавливается в качестве базовой специальной цены, к которой применяется тот же набор налоговых расчетов. (чтобы код вида мог отображать как оригинал, так и цену SPECIAL!)

if ($this->config->get('config_tax')) {
    $tax = $this->currency->format((float)$result['special'] ? 
           $result['special'] : $result['price']);
} else {
    $tax = false;
}

Не для всех установок настроен налог.Если это так, тогда $tax устанавливается как базовая или базовая специальная цена. (чтобы код представления мог отображать, сколько стоит элемент до налога. (Немного нелогично, что $tax - это цена без каких-либо налогов)

Имеет смысл? Если вам нужно больше узнать о том, как рассчитывается цена, присмотритесь к tax->calculate(). В противном случае это

$taxed_price = $special ? $special : $price; 
$untaxed_price = (float)$result['special'] ? $result['special'] : $result['price'];
2 голосов
/ 09 ноября 2011

Просто краткое примечание к ответу мистера Трика. Три параметра $ this-> tax-> calc () равны

$ value, $ tax_class_id, $ Рассчитать = true

Третий из которых не обязателен, но в исходном коде он получает глобальное значение конфигурации того, следует ли применять налог (так как вы можете отключить его в настройках). Стоит также отметить, что объект налога изменился между версиями (я думаю, что это был 1.5.1.2, который изменился последним), поэтому, если вы хотите сделать его обратно совместимым, это то, что нужно учитывать

...