Как я могу показать сумму, сохраненную в magento 2

Я пытаюсь отобразить сумму, сохраненную на странице каталога для веб-сайта magento 2.0.2. Однако я не получаю результат расчета. Я просто получаю пустое место. Я редактирую final_price.phtml в моем файле темы. Пожалуйста, посоветуйте мне, что не так. Я не нашел никакой информации в Google, так как большинство результатов относится к magento 1, и коды выдают ошибки. Вот как выглядит мой код в разделе, в котором я пытаюсь выполнить вычисления. Совет ценится. Спасибо

<span class="special-price"><span class="only-text">Only: </span>
<?php echo $block->renderAmount($finalPriceModel->getAmount(), [
'display_label'     => __('Special Price'),
'price_id'          => $block->getPriceId('product-price-' . $idSuffix),
'price_type'        => 'finalPrice',
'include_container' => true,
'schema' => $schema
]); ?>
</span>
<br>
<span class="old-price"><span class="rrp-text">RRP: </span>
<?php echo $block->renderAmount($priceModel->getAmount(), [
'display_label'     => __('Regular Price'),
'price_id'          => $block->getPriceId('old-price-' . $idSuffix),
'price_type'        => 'oldPrice',
'include_container' => true,
'skip_adjustments'  => true
]); ?>
</span>
<span class="saving-price"><span class="saving-text">Saving: </span>
<?php
$wasPrice = $block->renderAmount($priceModel->getAmount(), []);
$nowPrice = $block->renderAmount($finalPriceModel->getAmount(), []);
if ($nowPrice < $wasPrice){
$saving = $wasPrice - $nowPrice;
echo $saving;
}
?>
</span>

1

Решение

Вместо того, чтобы использовать

$wasPrice = $block->renderAmount($priceModel->getAmount(), []);
$nowPrice = $block->renderAmount($finalPriceModel->getAmount(), []);

ты должен использовать

$wasPrice = $priceModel->getValue();
$nowPrice = $finalPriceModel->getValue();

$ priceModel и $ finalPriceModel ссылаются на /** @var \Magento\Framework\Pricing\Price\PriceInterface $priceModel */ как вы можете видеть в строке 17 в вашем final_price.phtml

затем внутри PriceInterface.php мы увидим, что getAmount () возвращает объект, а getValue () просто возвращает число.

/**
* Get price value
*
* @return float
*/
public function getValue();

/**
* Get Price Amount object
*
* @return AmountInterface
*/
public function getAmount();
1

Другие решения

Я столкнулся с той же проблемой на страницах с категориями и результатами поиска на Magento 2. Вот что я в итоге выяснил. Надеюсь, поможет! (Примечание: это все относится к для каждого цикл, который проходит через каждый $ _product в $ _productCollection):

$regprice = $_product->getPrice();
$specialprice = $_product->getSpecialPrice();
$yousave = number_format((float)($regprice - $specialprice), 2, '.', '');
$yousavepct = number_format((float)(100*(($regprice - $specialprice)/$regprice)), 0);

if($yousave > 0): ?>
<p class="you-save-statement">You save: $<?php echo $yousave; ?> (<?php echo $yousavepct; ?>%)</p>
<?php endif; ?>
0

Я нашел это работает хорошо

<?php if ($block->hasSpecialPrice()): ?>
<span class="special-price">
<?php /* @escapeNotVerified */ echo $block->renderAmount($finalPriceModel->getAmount(), [
'display_label'     => __('Special Price'),
'price_id'          => $block->getPriceId('product-price-' . $idSuffix),
'price_type'        => 'finalPrice',
'include_container' => true,
'schema' => $schema
]); ?>
</span>
<span class="old-price">
<?php /* @escapeNotVerified */ echo $block->renderAmount($priceModel->getAmount(), [
'display_label'     => __('RRP'),
'price_id'          => $block->getPriceId('old-price-' . $idSuffix),
'price_type'        => 'oldPrice',
'include_container' => true,
'skip_adjustments'  => true
]); ?>
</span>
</span>
<br>
<span class="saving-price"><span class="saving-text"></span>
<?php
$wasPrice = $priceModel->getValue();
$nowPrice = $finalPriceModel->getValue();
$saving = $wasPrice - $nowPrice;
$saving = number_format((float)($wasPrice - $nowPrice), 2, '.', '');
$savingpct = number_format((float)(100*(($wasPrice - $nowPrice)/$wasPrice)), 0);if ($nowPrice < $wasPrice){

echo "You save: $ ".$saving. "<br />";
echo $savingpct. "% Off";
}
?>
</span>
0
По вопросам рекламы [email protected]