使 Magento“继续购物”按钮重定向到最后添加到购物车的产品类别

问题描述 投票:0回答:2

购物车页面上的继续购物按钮无法按我的意愿工作。

当我单击按钮时,然后转到主页。

我想转到上一个类别页面。

php magento shopping-cart
2个回答
5
投票

您所描述的按钮确实有效。返回主页可能是 Magento 的标准行为之一。

要回答您的问题,您可以执行以下操作。

请注意,如果产品存在于多个类别中,这将重定向到其附加的第一个类别。

这些代码已在 Magento 1.7.0.0 上成功测试。

PHP 代码为:

<?php
    $lastProductAddedToCartId = Mage::getSingleton('checkout/session')->getLastAddedProductId();
    if($lastProductAddedToCartId) {
        $productCategoryIdsArray = Mage::getModel('catalog/product')->load($lastProductAddedToCartId)->getCategoryIds();
        $continueShoppingCategoryUrl = Mage::getModel('catalog/category')->load($productCategoryIdsArray[0])->getUrl();
    }
?>

HTML 按钮代码为:

<button type="button" title="Continue Shopping" class="button btn-continue" onclick="setLocation('<?php echo (isset($continueShoppingCategoryUrl)) ? $continueShoppingCategoryUrl : $this->getContinueShoppingUrl(); ?>')"><span><span>Continue Shopping</span></span></button>

例如,如果将 PHP 代码放在

template/checkout/cart.phtml
文件的开头,上面的代码就可以工作,但这不是最佳实践。

最佳实践是确定是否:

1) 您自己的助手,您可以在按钮的

setLocation()
PHP 参数中调用它,如下所示:

setLocation('<?php echo (Mage::helper('myhelper')->getContinueShoppingCategoryUrl()) ? Mage::helper('myhelper')->getContinueShoppingCategoryUrl() : $this->getContinueShoppingUrl(); ?>')

2)或(IMO 不太好),重写

Mage_Checkout_Block_Cart::getContinueShoppingUrl()
方法。


1
投票

在对我的第一个答案进行评论后,我制作了一个更复杂的脚本,该脚本比第一个答案更需要资源,因此我将其作为单独的答案发布。请小心,PHP 端和 PHTML 端两者确实不同。

这是我在 Magento CE 1.7.0.0 上成功测试的结果。 下面的场景按照我提供的注释代码中的预期工作。


目录配置

A类(家具)

  • 产品1(沙发)

B 类(电子)

  • 产品2(桌面)
  • 产品 3(笔记本电脑)

场景

a) 将产品 1 添加到购物车 => 添加后“继续购物”会立即重定向到类别 A

b) 导航网站并返回购物车而不添加新产品 =>“继续购物”重定向到类别 A

c) 将产品 2 添加到购物车 => 添加后“继续购物”会立即重定向到类别 B

d) 导航网站并返回购物车而不添加新产品 =>“继续购物”重定向到主页,因为购物车中的产品不属于同一类别。

e) 从购物车中删除产品 1 =>“继续购物”始终重定向到类别 B

f) 将产品 3 添加到购物车 =>“继续购物”始终重定向到类别 B


PHP 代码

<?php
    $continueShoppingCategoryUrl = false;

    /**
     * If we are on the cart page just after we added an item to the cart,
     * we use its category for "Continue Shopping" redirect
     */
    $lastProductAddedToCartId = Mage::getSingleton('checkout/session')->getLastAddedProductId();
    if($lastProductAddedToCartId) {
        $productCategoryIdsArray = Mage::getModel('catalog/product')->load($lastProductAddedToCartId)->getCategoryIds();
        $continueShoppingCategoryUrl = Mage::getModel('catalog/category')->load($productCategoryIdsArray[0])->getUrl();
    }

    /**
     * Otherwise, if we are on the cart page at any other moment, we make sure
     * that all items do belong to the same category and, if this is
     * the case, we use this unique category for "Continue Shopping" redirect
     * 
     * If all cart items do not belong to the same category, we are
     * compelled to let Magento process in its standard way because we 
     * cannot tell which category is the one to redirect to!
     */
    if(!$continueShoppingCategoryUrl) {
        $allCategoryIds = array();
        $cartItems = Mage::helper('checkout/cart')->getQuote()->getAllVisibleItems();
        foreach($cartItems as $cartItem) {
            $productCategoryIds = Mage::getModel('catalog/product')->load($cartItem->getProductId())->getCategoryIds();
            $allCategoryIds = array_merge($allCategoryIds, $productCategoryIds);
        }
        $allCategoryIds = array_unique($allCategoryIds);
        if(count($allCategoryIds) === 1) {
            $continueShoppingCategoryUrl = Mage::getModel('catalog/category')->load(reset($allCategoryIds))->getUrl();
        }
    }
?>

HTML 按钮代码

<button type="button" title="Continue Shopping" class="button btn-continue" onclick="setLocation('<?php echo ($continueShoppingCategoryUrl) ? $continueShoppingCategoryUrl : $this->getContinueShoppingUrl(); ?>')"><span><span>Continue Shopping</span></span></button>

最佳实践提醒

再次强调,最佳实践是在按钮上调用 Helper,而不是在 cart.phtml 模板中使用原始 PHP 代码。

© www.soinside.com 2019 - 2024. All rights reserved.