继续购物按钮在购物车页面上无法正常工作。
当我单击按钮时,然后转到主页。
我想去上一个类别页面。
您描述的按钮确实有效。返回主页可能是标准的 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()
方法。
在对我的第一个答案发表评论后,我制作了一个更复杂的脚本,该脚本作为第一个答案更需要资源,因此我将其作为单独的答案发布。请注意,两者在 PHP 端和 PHTML 端确实不同。
这是我在 Magento CE 1.7.0.0 上成功测试的内容。下面的场景在我提供的注释代码中按预期工作。
A类(家具)
B类(电子)
a) 将产品 1 添加到购物车 => “继续购物”在添加后立即重定向到类别 A
b)导航网站并返回购物车而不添加新产品=>“继续购物”重定向到类别 A
c) 将产品 2 添加到购物车 => “继续购物”在添加后立即重定向到类别 B
d) 导航网站并返回购物车而不添加新产品 =>“继续购物”重定向到主页,因为购物车中的产品不属于同一类别。
e) 从购物车中删除产品 1 =>“继续购物”总是重定向到类别 B
f) 将产品 3 添加到购物车 => “继续购物”总是重定向到类别 B
<?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();
}
}
?>
<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 代码。