将购物车块添加到cms页面

时间:2014-07-03 17:52:36

标签: php magento

我想在购物车块中添加一个cms页面,但每当我尝试时,都没有任何反应......甚至没有错误。

我已尝试过本教程http://www.magento.cc/how-to-use-php-on-a-cms-page.html

所以我在app / code / local中创建了新文件夹,然后创建了一个Test.php文件,但是当我尝试包含

 {{block type="YourModule_Custom/test" my_param1="value 1" another_param="value 2"}}
在cms页面中,没有任何内容出现。

这是我在Test.php页面中的代码:

<?php
class YourModule_Custom_Block_Test extends Mage_Core_Block_Abstract
{
    protected function _toHtml()
    {
        echo 'TEST';
        $this->getChildHtml('header');
        return $html;
    }
}

4 个答案:

答案 0 :(得分:0)

您可以执行local.xml更新。并将您的内容放在.phtml文件

<cms_index_index>
    <reference name="content">
        <block type="Your_custom/Block" name="home_main" as="home_main" template="cms/default/home.phtml">
        </block>
    </reference>
</cms_index_index>

在cms / default /中创建名为home.phtml的文件然后您可以使用自己的块类型来使用自定义模块/函数

然后在那里添加您的主页内容。

答案 1 :(得分:0)

我不知道你想要达到的目标。但是从你的问题来看,我有一种强烈的感觉,你试图通过CMS页面设置自己的模板。如果是这种情况,让我们分析一下您的块没有显示任何输出的原因。

你的块定义是这样的

{{block type="YourModule_Custom/test" my_param1="value 1" another_param="value 2"}}

这种定义没有问题。但是如果你将name添加到你的块中,这很好。如果您设置了template,那么您就不需要任何后端代码来为您的块设置模板。那你的块应该是这样的

{{block type="YourModule_Custom/test" name="test.block" template="test.phtml"}}

现在,当magento遇到这个时,它会找到你的块,将描述的名称设置为该块(以供将来参考,将使用此name。但是在这种情况下它不相关),设置模板指定给你阻止然后在该模板中呈现内容。

所以你应该有一个你指定的类型块。你现在就拥有它(你不需要那个_toHtml())。除此之外,您还需要一个模板文件test.phtml,它应位于app/design/frontend/<your_package>/<your_theme>/template/test.phtml位置。你现在没有那个文件。因此,创建它并在该文件中添加此内容

<p><?php echo "I am here. Can you see me ?"; ?></p> 

现在检查您的CMS页面输出。你可以看到那个内容。不是吗?

所以现在你要做的是,而不是设置模板和该块定义,你试图通过你的块设置它。这是错的吗 ?显然,不。在某些情况下,我们需要采用这种方式。我认为你真的需要它。所以再次让我们以这种形式重新划分我们的块。

 {{block type="YourModule_Custom/test" name="test.block"}}

嗯。在这里,我们现在没有为此块设置模板。因此,您可以通过块定义进行设置。您使用了_toHtml()方法。

<?php
class YourModule_Custom_Block_Test extends Mage_Core_Block_Abstract
{
    protected function _toHtml()
    {
        echo 'TEST';
        $this->getChildHtml('header');
        return $html;
    }
}
?>

此方法用于设置模板,然后呈现内容。所以你走在正确的轨道上。但问题是,你没有设置任何模板!!加上你的方法返回一个什么都没有的变量$html。那么我们应该通过_toHtml()返回什么?答案在于Mage_Core_Block_Template。让我们看看_toHtml()定义

protected function _toHtml()
{
    if (!$this->getTemplate()) {
        return '';
    }
    $html = $this->renderView();
    return $html;
}

基本上它的作用是,它检查是否设置了模板,如果没有返回任何内容。如果它确实呈现它。这意味着,很明显我们需要设置一个模板。所以你的块应该是这样的。

<?php
class YourModule_Custom_Block_Test extends Mage_Core_Block_Template
{
    protected function _toHtml()
   {
       $this->setTemplate('test.phtml');
       $html = parent::_toHtml();
       return $html;
   }
}

请注意,您的区块来自Mage_Core_Block_Template,而不是Mage_Core_Bock_Abstract。这是因为setTemplate()类在Mage_Core_Block_Template类中定义。在_toHtml()中,我们设置模板,然后将其余部分留给父块。现在,检查您的CMS页面中是否显示test.phtml中的内容。它做对了吗?

答案 2 :(得分:0)

我不明白你想要什么。但根据您的问题,我的理解是您希望将购物车块显示在主页,关于我们页面等任何CMS页面中。

如果我的理解是正确的,那么这里有一个解决方案。

您可以从管理员将此代码插入您的cms页面。

管理员 - &gt; CMS - &gt;页面 - &gt;选择要显示块的任何页面 - &gt;单击左侧导航中的设计选项卡 - &gt;在页面布局部分下面插入以下代码&#34;布局更新XML&#34;领域。点击保存。

<reference name="content">
        <block type="checkout/cart" name="checkout.cart">
            <action method="setCartTemplate"><value>checkout/cart.phtml</value></action>
            <action method="setEmptyTemplate"><value>checkout/cart/noItems.phtml</value></action>
            <action method="chooseTemplate"/>
            <action method="addItemRender"><type>simple</type><block>checkout/cart_item_renderer</block><template>checkout/cart/item/default.phtml</template></action>
            <action method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer_grouped</block><template>checkout/cart/item/default.phtml</template></action>
            <action method="addItemRender"><type>configurable</type><block>checkout/cart_item_renderer_configurable</block><template>checkout/cart/item/default.phtml</template></action>

            <block type="core/text_list" name="checkout.cart.top_methods" as="top_methods" translate="label">
                <label>Payment Methods Before Checkout Button</label>
                <block type="checkout/onepage_link" name="checkout.cart.methods.onepage" template="checkout/onepage/link.phtml"/>
            </block>

            <block type="page/html_wrapper" name="checkout.cart.form.before" as="form_before" translate="label">
                <label>Shopping Cart Form Before</label>
            </block>

            <block type="core/text_list" name="checkout.cart.methods" as="methods" translate="label">
                <label>Payment Methods After Checkout Button</label>
                <block type="checkout/onepage_link" name="checkout.cart.methods.onepage" template="checkout/onepage/link.phtml"/>
                <block type="checkout/multishipping_link" name="checkout.cart.methods.multishipping" template="checkout/multishipping/link.phtml"/>
            </block>

            <block type="checkout/cart_coupon" name="checkout.cart.coupon" as="coupon" template="checkout/cart/coupon.phtml"/>
            <block type="checkout/cart_shipping" name="checkout.cart.shipping" as="shipping" template="checkout/cart/shipping.phtml"/>
            <block type="checkout/cart_crosssell" name="checkout.cart.crosssell" as="crosssell" template="checkout/cart/crosssell.phtml"/>

            <block type="checkout/cart_totals" name="checkout.cart.totals" as="totals" template="checkout/cart/totals.phtml"/>
        </block>
    </reference>

之后,您将在CMS页面上看到购物车块。如果您不需要任何阻止,可以从上面的代码中删除该blck。

答案 3 :(得分:0)

如果您尝试从cms页面调用添加到购物车,则添加类似

的网址
checkout/cart/add?product=$id&qty=$qty

实施例 -

<a href="{{store url='checkout/cart/add?product=5&qty=3'}}">
<img src="{{skin url='images/addtocart.jpg'
}}" alt="product5" /></a>