Перезагрузите мини-корзину после удаления товара


Я пытаюсь перезагрузить верхнюю корзину после удаления товара, чтобы просмотреть оставшееся содержимое корзины.

При удалении товара из мини-корзины дополнительные данные не запрашиваются, поэтому, если есть 5 разных товаров, вы можете удалить только 3 из них, прежде чем перезагрузить всю страницу, чтобы получить доступ к последним 2

Я пытался использовать для этого jQuery, но мне не повезло с этим

В моей функции removeItem, которая получает ответ от сервера:

removeItem: function(el) {
    var cart = this;
    cart.hideMessage();
    cart.showOverlay();
    $j.ajax({
        type: 'POST',
        dataType: 'json',
        data: {form_key: cart.formKey},
        url: el.attr('href')
    }).done(function(result) {
        cart.hideOverlay();
        if (result.success) {
            cart.updateCartQty(result.qty);
            cart.updateContentOnRemove(result, el.closest('#minicart_content'));
        } else {
            cart.showMessage(result, el.closest('#minicart_content').attr('id'));
        }
    }).error(function() {
        cart.hideOverlay();
        cart.showError(cart.defaultErrorMessage);
    });
},

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

Может ли кто-нибудь предложить лучший подход?

Все элементы удаляются с помощью getAjaxDeleteUrl из Checkout/Block/Cart/Item/Renderer.php

public function getAjaxDeleteUrl()
{
    return $this->getUrl(
        'checkout/cart/ajaxDelete',
        array(
            'id'=>$this->getItem()->getId(),
            Mage_Core_Controller_Front_Action::PARAM_NAME_URL_ENCODED => $this->helper('core/url')->getEncodedUrl(),
            '_secure' => $this->_getApp()->getStore()->isCurrentlySecure(),
        )
    );
}

И вот мое действие ajaxDeleteAction внутри моего CartController.php

public function ajaxDeleteAction()
{
    if (!$this->_validateFormKey()) {
        Mage::throwException('Invalid form key');
    }
    $id = (int) $this->getRequest()->getParam('id');
    $result = array();
    if ($id) {
        try {
            $cart = $this->_getCart();
            $cart->removeItem($id)->save();

            $result['qty'] = $this->_getCart()->getSummaryQty();
            $result['subtotal'] = Mage::helper('checkout')->formatPrice($this->_getCart()->getQuote()->getSubtotal());

            $result['success'] = 1;
            $result['message'] = $this->__('Item was removed successfully.');
        } catch (Exception $e) {
            $result['success'] = 0;
            $result['error'] = $this->__('Can not remove the item.');
        }
    }

    $this->getResponse()->setHeader('Content-type', 'application/json');
    $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}

Что мне нужно сделать, так это обновить мини-корзину, чтобы загрузить другие товары, которые не видны в корзине.

Пожалуйста, помогите, головокружительный на столе!

Author: user1704524, 2015-01-12

2 answers

Это мое быстрое и грязное решение.
Всегда перечисляйте в мини-корзине все товары в корзине, но для всех товаров после первых 3 просто сделайте их скрытыми. (display:none).
При удалении товара в корзине удалите товар из DOM и проверьте, есть ли скрытый другой товар. Если это так, то покажите этот предмет.
Таким образом, вам не нужно получать html-код с сервера.

 0
Author: Marius, 2015-06-10 07:28:43

В вашем контроллере, где вы обрабатываете запрос ajax, загрузите макет ПЕРЕД удалением продукта из списка. Затем отправьте этот макет на свой контроллер. Таким образом, вы все равно увидите последний продукт, который был только что удален.

Или сохраните идентификатор продукта после удаления и просто снова вставьте этот продукт после вашего запроса ajax с помощью jquery и php.

 0
Author: easymoden00b, 2015-01-14 19:47:53