在帮助器中使用模板/块

时间:2013-07-17 16:53:56

标签: magento templates block helper

我有一个帮助这个方法来获取顾客购物车中的物品

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控制器中调用。我想在没有页面刷新的情况下更新用户的购物车,但需要格式化。

1 个答案:

答案 0 :(得分: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() ?>

尝试一下,看看它是否有帮助!