0

顧客のカート内のアイテムを取得するためのこのメソッドのヘルパーがあります

public function getCartData()
{
    //Get cart DATA
    $quote = Mage::getSingleton('checkout/session')->getQuote();
    $cartItems = $quote->getAllVisibleItems();
    $items = '';
    foreach ($cartItems as $item) {
        $items .= $item->getId() . " ";
    }
    return $items;
}

しかし、私がやりたいのは、この行を置き換えることです

$items .= $item->getId() . " ";

のインスタンスでtemplate/checkout/cart/sidebar/default.phtml

これについてどうすればいいですか?メソッドは ajax コントローラーで呼び出されています。ページを更新せずにユーザーのカートを更新したいのですが、フォーマットする必要があります。

4

1 に答える 1

1

$itemでは、ループ内のそれぞれのテンプレートにあるものをレンダリングしたいですか?

を見るとapp/design/frontend/base/default/layout/checkout.xml、元のサイドバー ブロックが定義されていることがわかります。

<block type="checkout/cart_sidebar" name="cart_sidebar" template="checkout/cart/sidebar.phtml" before="-">
    <action method="addItemRender"><type>simple</type><block>checkout/cart_item_renderer</block><template>checkout/cart/sidebar/default.phtml</template></action>
    <action method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer_grouped</block><template>checkout/cart/sidebar/default.phtml</template></action>
    <action method="addItemRender"><type>configurable</type><block>checkout/cart_item_renderer_configurable</block><template>checkout/cart/sidebar/default.phtml</template></action>
</block>

単純にアイテム レンダラーを使用するだけで済むかどうかはわかりませんがcheckout/cart_item_renderer(これは、質問に基づいて希望するものです)、試してみましょう。そのため、ブロックのインスタンスをプログラムで作成し、アイテムをフィードし、テンプレートを割り当て、その HTML を変数に出力する必要があります。

$items='';
foreach($cartItems as $item) {
    $items.=Mage::app()->getLayout()->createBlock('checkout/cart_item_renderer')
            ->setItem($item)
            ->setTemplate('checkout/cart/sidebar/default.phtml')
            ->toHtml();
}

ブロックを作成した後、アイテムを設定する方法に注目してください。テンプレートを調べると、それが呼び出していることが上部に表示されるため、これは重要です。

<?php $_item = $this->getItem() ?>

これを試してみて、それが役立つかどうかを確認してください!

于 2013-07-17T17:20:02.140 に答える