Magento 2 Teklif Al Alıntı Toplamda minicart.phtml


10

Minicart.phtml'de sepeti alıntı toplamı almaya çalışıyorum, ama şansım yok. Magento \ Checkout \ Model \ Cart enjekte ediyorum.

İşte benim kod:

$this->cart = $cart;
$cartQuote= $this->cart->getQuote()->getData();
echo $cartQuote['base_grand_total'];

Bu kodu çalıştırdıktan sonra miniart kırılır ve tamamen ön uçtan kaybolur.

Teşekkürler!


Daha fazla bilgi paylaşabilir misiniz?
Sohel Rana

Hei. 2.1 sürümüne güncellendikten sonra çalışmıyor gibi görünüyor, yalnızca alışveriş sepeti / ödeme sayfasında veri döndürüyor, diğer sayfalar 0 değer döndürüyor.
Frii Zuurikas

Yanıtlar:


17

Güncellenmiş ara toplamı almak için minicart.phtml dosyanızın altındaki satırı tutmanız yeterlidir,

Önbellek iyi çalışıyorsa, aşağıdaki satır tüm durumlar için çalışır,

<span data-bind="html: getCartParam('subtotal')"></span> 

Grandtotal, nakliye ücreti,

Minicart.phtml dosyasında aşağıdaki kodu kullanarak mevcut teklif için GrandTotal, alt toplam ve gönderim bedeli alabilirsiniz, ancak önbellek etkinleştirildiğinde aşağıdaki yöntemi kullanarak yeni ürün eklediğinizde fiyatı güncellemeyin.

<?php
    $quote = $block->getTotalsCache();
    $getSubTotal = $quote['subtotal']->getData('value');
    $getGrandTotal = $quote['grand_total']->getData('value');
    $getShippingRate = $quote['shipping']->getData('value');

        $finalSubTotal = $this->helper('Magento\Framework\Pricing\Helper\Data')->currency(number_format($getSubTotal,2),true,false);
        $finalShippingTotal = $this->helper('Magento\Framework\Pricing\Helper\Data')->currency(number_format($getShippingRate,2),true,false);
        $finalGrandTotal = $this->helper('Magento\Framework\Pricing\Helper\Data')->currency(number_format($getGrandTotal,2),true,false);
?>

Ubuntu üzerinde benim localhost xamp üzerinde mükemmel çalıştı, ancak $ quote = $ block-> getTotalsCache (); test sunucusu linux fedora üzerinde çalışmıyor
Kumar A.

Zaten linux sunucusu üzerinde çalışıyor, bazı çatışma veya başka bir hata olduğunu düşünüyorum.
Rakesh Jesadiya

Daha fazla karıştı ve $ block-> getTotalsCache (); yalnızca önbellek devre dışı bırakıldığında çalışır. Bunu Önbellek Etkin ile kontrol ettiniz mi? Mine Magento2.1.0
Kumar A.

1
Bunun gibi indirim tutarı nasıl alınır?
Deeban Babu

@KumarAbhinav, önbellek etkinleştirildikten sonra dinamik fiyat almak için lütfen <span data-bind = "html: getCartParam ('subtotal')"> </span> adresini saklayın.
Rakesh Jesadiya

8

Bir müşteriden de benzer bir sorum vardı. burada küçük bir bölümdeki varsayılan alışveriş sepeti simgesi yerine tarz bir alışveriş sepeti bloğunda "[miktar] öğe [alt toplam]" göstermek istedi.

Bu soruyu burada bulduk, ancak \Magento\Checkout\CustomerData\Cartsadece bazı html'leri doğru bir şekilde oluşturmak için sınıfı genişletmemiz gereken cevabı beğenmedik

bu, şablonda nasıl düzelttiğimiz koddur:

<span class="counter-label">
    <!-- ko if: getCartParam('summary_count') == 1 -->
        <!-- ko text: getCartParam('summary_count') --><!-- /ko -->
        <!-- ko i18n: 'item' --><!-- /ko -->
        <span data-bind="html: getCartParam('subtotal')"></span>
    <!-- /ko -->
    <!-- ko if: getCartParam('summary_count') != 1 -->
        <!-- ko text: getCartParam('summary_count') --><!-- /ko -->
        <!-- ko i18n: 'items' --><!-- /ko -->
        <span data-bind="html: getCartParam('subtotal')"></span>
    <!-- /ko -->
</span>

Standart knockout.js veri bağlamasını da kullanabilirsiniz ve çılgın magento 2 nakavt yorum yöntemini kullanmaya gerek duymuyorsunuz. bu getCartParam('subtotal'), <span ="price"></span>etiketi nedeniyle normalde alt toplamı yanlış yazdığı html yöntemiyle oluşturulma sorununu çözdü


5

Yukarıdaki kod sayfa yüklemesinde çalışır, ancak şimdi Knockout JS kullandığından magento2 ajax sepete ekle ile çalışmaz.

Bunun için kullanmalısınız -

  1. Modülünüzdeki " \ Magento \ Checkout \ CustomerData \ Cart " magento sınıfını geçersiz kılın ve " getSectionData " yöntemini genişletin
    genel işlev getSectionData ()
    {
        $ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); // Nesne Yöneticisi Örneği
        $ priceHelper = $ objectManager-> create ('Magento \ Framework \ Pricing \ Helper \ Data'); // Fiyatlandırma Yardımcısının Örneği

        $ totals = $ this-> getQuote () -> getTotals ();
        dönüş [
            'özet_count' => $ this-> getSummaryCount (),
            'subtotal' => isset ($ totals ['subtotal'])
                ? $ This-> checkoutHelper-> formatPrice ($ toplamlar [ 'ara toplam'] -> getValue ())
                : 0,
            'subtotal_value' => isset ($ totals ['subtotal'])
                ? $ PriceHelper-> para ($ toplamlar [ 'ara toplam'] -> getValue (), doğru, yanlış)
                : '',
            'possible_onepage_checkout' => $ this-> isPossibleOnepageCheckout (),
            'items' => $ this-> getRecentItems (),
            'extra_actions' => $ this-> layout-> createBlock ('Magento \ Catalog \ Block \ ShortcutButtons') -> toHtml (),
            'isGuestCheckoutAllowed' => $ this-> isGuestCheckoutAllowed (),
        ];
    }

Burada " alt toplam " fiyat kapsayıcı yayılma dönecek ve KO kullanarak TEXT olarak görüntülenecektir gibi yeni bir sepeti param " subtotal_value " ekledim . Burada , " __construct " a bağımlılık enjekte edemeyeceğiniz için doğrudan " Nesne Yöneticisi Örneği " kullanmanız gerekir .

NOT, doğrudan " Nesne Yöneticisi Örneği " kullanmamız gerekebileceği birkaç istisna vardır . Bizim durumumuzda yapıcı ile geriye dönük uyumluluktur.
ObjectManager İstisnası

  1. Ardından, magento varsayılan teması " /cart/minicart.phtml " temanıza kopyalayın ve KO kodlarını ekleyin.

    ko text: getCartParam ('subtotal_value')


0

Düzeninizde, sınıfın "Magento \ Checkout \ Block \ Cart \ Totals" olarak işaretlenmiş bir blok tanımlayın

<block class="Magento\Checkout\Block\Cart\Totals" name="quote.print.totals" as="quote.print.totals" after="checkout.cart" 
            template="MyNamespace_PrintCart::totals.phtml"/>

Sonra .phtml dosyasında aşağıdaki kodu kullanabilirsiniz

<?php 
$totals = $block->getTotals() ;
?>
<table class="data table totals">
    <tbody>
        <?php foreach($totals as $key => $total) :?>
            <?php if(!empty($total->getValue())) :?>
                <tr>
                    <td><?= $total->getTitle()->getText() ?></th>
                    <td>
                        <span class="price"><?= $this->helper('Magento\Framework\Pricing\Helper\Data')->currency(number_format($total->getValue(),2),true,false) ?></span>                    
                    </td>
                </tr>
            <?php endif ?>
        <?php endforeach ?>
    </tbody>
    </table>

Beklenen çıktı

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.