ショッピング カート ページで、ショッピングを続けるボタンが機能しません。
ボタンをクリックすると、ホームページに移動します。
前のカテゴリページに行きたいです。
あなたが説明したボタンは実際に機能しています。ホームページに戻ることは、Magento の標準的な動作の 1 つかもしれません。
あなたの質問に答えるために、あなたができることはここにあります。
商品が複数のカテゴリーに存在する場合、最初に関連付けられたカテゴリーにリダイレクトされることに注意してください。
これらのコードは、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>
上記のコードは、たとえば、template/checkout/cart.phtml
ファイルの先頭に PHP コードを配置した場合に機能しますが、これは最善の方法ではありません。
ベスト プラクティスは、次のいずれかにすることです。
setLocation()
1) 次のようにボタンの PHP 引数で呼び出すことができる独自のヘルパー:
setLocation('<?php echo (Mage::helper('myhelper')->getContinueShoppingCategoryUrl()) ? Mage::helper('myhelper')->getContinueShoppingCategoryUrl() : $this->getContinueShoppingUrl(); ?>')
2) または (あまり良くない IMO)、Mage_Checkout_Block_Cart::getContinueShoppingUrl()
メソッドを書き直します。
最初の回答に対するコメントに続いて、最初の回答としてより多くのリソースを必要とするより複雑なスクリプトを作成したので、別の回答として投稿しました。PHP側とPHTML側では、どちらも実際には異なりますので、注意してください。
これが私がMagentoCE1.7.0.0で正常にテストしたものです。以下のシナリオは、私が提供するコメント付きコードで期待どおりに機能します。
カテゴリーA(家具)
カテゴリーB(エレクトロニクス)
a)商品1をカートに追加=>「ショッピングを続行」は商品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>
ここでも、ベストプラクティスは、cart.phtmlテンプレートに生のPHPコードを含めるのではなく、ボタンでヘルパーを呼び出すことです。