1

ショッピング カート ページで、ショッピングを続けるボタンが機能しません。

ボタンをクリックすると、ホームページに移動します。

前のカテゴリページに行きたいです。

4

2 に答える 2

5

あなたが説明したボタンは実際に機能しています。ホームページに戻ることは、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()メソッドを書き直します。

于 2012-09-01T09:20:20.113 に答える
0

最初の回答に対するコメントに続いて、最初の回答としてより多くのリソースを必要とするより複雑なスクリプトを作成したので、別の回答として投稿しました。PHP側とPHTML側では、どちらも実際には異なりますので、注意してください。

これが私がMagentoCE1.7.0.0で正常にテストしたものです。以下のシナリオは、私が提供するコメント付きコードで期待どおりに機能します。


カタログ構成

カテゴリーA(家具)

  • 製品1(ソファ)

カテゴリーB(エレクトロニクス)

  • 製品2(デスクトップ)
  • 製品3(ラップトップ)

シナリオ

a)商品1をカートに追加=>「ショッピングを続行」は商品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>

ベストプラクティスのリマインダー

ここでも、ベストプラクティスは、cart.phtmlテンプレートに生のPHPコードを含めるのではなく、ボタンでヘルパーを呼び出すことです。

于 2012-09-04T18:34:15.597 に答える