#php #magento
#php #magento
Вопрос:
У меня пользовательская проблема с подсчетом налогов magento. В магазине у меня есть цены, которые включают налоговую ставку и, например:
- Я хочу заказать какой-нибудь продукт по цене 4 (без налога: 3,28).
- Я хочу заказать кол-во 37.
- промежуточный итог (без учета налогов): 121,36 (правильно),
- итого 148,00, что неверно (37 * 3.28 * 1.22 = 148,0592, значит, нужно заплатить 148,06).
Я перепробовал много разных настроек о налоге, также пытался найти, какая часть кода отвечает за это, но не может найти ее через структуру magento.
Есть идеи, как решить эту проблему? Я использую Magento v. 1.9.2.4
редактировать: Наконец-то я нашел, в чем проблема, однако до сих пор не имею представления о хорошем решении. Я изменил для целей тестирования 2 файла:
- appcodecoreMageCoreModelStore.php
public function roundPrice($price) { return round($price, 4); }
-
appcodecoreMageSalesModelQuoteAddressTotalSubtotal.php
if ($quoteItem->getParentItem() amp;amp; $quoteItem->isChildrenCalculated()) { $finalPrice = $quoteItem->getParentItem()->getProduct()->getPriceModel()->getChildFinalPrice( $quoteItem->getParentItem()->getProduct(), $quoteItem->getParentItem()->getQty(), $quoteItem->getProduct(), $quoteItem->getQty() ); $item->setPrice($finalPrice) ->setBaseOriginalPrice($finalPrice); $item->calcRowTotal(); } else if (!$quoteItem->getParentItem()) { $finalPrice = $product->getFinalPrice($quoteItem->getQty()); $finalPrice = 4.0016; $item->setPrice($finalPrice) ->setBaseOriginalPrice($finalPrice); $item->calcRowTotal(); $this->_addAmount($item->getRowTotal()); $this->_addBaseAmount($item->getBaseRowTotal()); $address->setTotalQty($address->getTotalQty() $item->getQty()); }
Итак, новые сомнения:
-
Интересно, могу ли я «просто так» изменить этот раунд на 4? Я видел некоторую информацию о том, что это может быть проблематично, например, для Paypal
-
Как получить базовую цену товара добавить налог, чтобы она округлилась до 4 способом «magento automagic»?
-
Теперь (конечно, это хитрый способ установить значение — сделал это только для теста) в моей корзине я вижу правильные значения — всего 148,06
Ответ №1:
Код, который вы ищете, будет находиться в app/design/ frontend/rwd/your_layout/template/catalog/product/price.phtml, если вы используете пользовательский макет, или в app/design/frontend/rwd/default/template/catalog/product/price.phtml, если нет.
Это довольно запутанный файл, поскольку он содержит целую кучу условий, помогающих решить, какой набор правил ценообразования использовать, поэтому выяснить, какие строки кода на самом деле отвечают за цену, отображаемую на ваших страницах, может быть непросто. Трюк, который я использовал, чтобы выделить правильные строки для изменения, чтобы повлиять на цены, отображаемые в разных местах на нашем сайте, заключался в добавлении некоторых произвольных имен классов к каждому из различных диапазонов в price.phtml, которые выглядят так, как будто они содержат цены.(их довольно много, я думаю, 40 или около того).
Так, например, я присваивал каждому последующему диапазону класса «цена» новый произвольный класс, состоящий просто из числа, начинающегося с 1.
Когда я просмотрел страницу с внешнего интерфейса с помощью инспектора элементов, я обнаружил, что все мои настраиваемые цены на товары, показанные на странице продукта, имеют класс «28», и, таким образом, обнаружил, что строки, которые мне нужно было изменить, находились в пределах диапазона, которому я присвоил класс 28
<span class="price 28">
//change whatever code is here to get the result you want
</span>
Надеюсь, это полезно.
Комментарии:
1. Спасибо за ответ, но я думаю, что мне нужно серверное решение, чтобы убедиться, что все будет работать нормально