Rumah  >  Soal Jawab  >  teks badan

Isu semasa mengedit pesanan dalam panel pentadbir Shopware apabila menambah diskaun tersuai

<p>Saya menulis diskaun troli beli-belah tersuai mengikut dokumentasi https://developer.shopware.com/docs/guides/plugins/plugins/checkout/cart/add-cart-discounts Semuanya berfungsi dengan baik, apabila pelanggan menambah atau mengalih keluar produk daripada troli, diskaun dikira semula, tetapi apabila saya ingin mengedit pesanan ini dalam panel pentadbir, saya mendapat ralat: </p> <blockquote> <p>Pengecualian PHP yang tidak ditangkap ShopwareCoreCheckoutCartExceptionLineItemNotStackableException: "Item baris dengan pengecam 'CHEAPEST_ITEM_CART_DISCOUNT' tidak boleh disusun dan kuantiti tidak boleh diubah dalam /var/www/shop/vendor/shopware/core/ItemItem/Cart Line/LineItemItem/Cart Line. .php baris 233 {"Exception": "[Object](Shopware Core Checkout Cart Exception LineItemNotStackableException (Kod: 0): Item baris dengan pengecam "CHEAPEST_ITEM_CART_DISCOUNT" tidak boleh disusun dan kuantiti tidak boleh diubah. di /var/www/shop/vendor/shopware/core/Checkout/Cart/LineItem/LineItem.php:233)"} []</p> </blockquote> <p>Saya "menyelesaikan" masalah ini dengan menambahkan semakan ini pada kod saya: </p> <pre class="brush:php;toolbar:false;">if($behavior->mempunyaiPermission(self::SKIP_PROMOTION)){ $items = $original->getLineItems()->filterType(self::LINE_ITEM_TYPE); foreach ($item sebagai $item) { $toCalculate->add($item); } kembali; }</pre> <p>Sekarang, jika saya mengedit pesanan dalam panel pentadbir, ralat tidak muncul, tetapi diskaun tidak dikira lagi dan menogol "Lumpuhkan promosi automatik" tidak berfungsi. </p> <p>Adakah terdapat sebarang penyelesaian untuk mengira semula diskaun tersuai secara berurutan pada operasi edit? Apabila saya menambah pesanan baru dalam panel pentadbir semuanya berfungsi dengan baik, masalahnya hanya dengan penyuntingan. Dokumentasi tidak mengatakan apa-apa tentang perkara ini. </p>
P粉811349112P粉811349112434 hari yang lalu877

membalas semua(1)saya akan balas

  • P粉710454910

    P粉7104549102023-09-02 14:33:53

    Cari jika diskaun telah ditambahkan pada troli dengan pengecam rujukan. Jika ya, hanya alih keluar contoh lama daripada troli anda dan tambahkan diskaun yang dikira semula.

    if ($original->has($discountLineItem->getId())) {
        $original->get($discountLineItem->getId())->setRemovable(true);
        $original->remove($discountLineItem->getId());
    
        return;
    }
    
    // $discountLineItem->getType() should equal LineItem::DISCOUNT_LINE_ITEM
    $toCalculate->add($discountLineItem);
    

    Selain itu, anda juga mesti memastikan bahawa pemproses anda dilaksanakan selepas Shopware sendiri PromotionProcessor, jika tidak ia akan cuba menambah semula diskaun yang anda tambahkan secara manual sebelum ini.

    <service id="MyPlugin\Cart\CustomPromotionProcessor">
        <!-- ... inject after default discount cart processor (3700) -->
        <tag name="shopware.cart.processor" priority="3600"/>
    </service>
    

    Saya mencipta contoh pemalam yang mengandungi semua perubahan dalam panduan yang diperlukan untuk mengira semula. Dalam calon keluaran semasa 6.5 上进行了测试,但也应该适用于最新版本的 6.4.

    Contoh ini adalah berdasarkan diskaun sebagai peratusan nilai troli. Jika diskaun sepatutnya menjadi nilai mutlak perubahan, prosesnya sedikit berbeza. Saya membuat garpu dalam repositori di atas dan memberikan contoh.

    balas
    0
  • Batalbalas