Magento - 使用购物车页面上的自定义模块添加自定义块

时间:2012-12-07 17:04:28

标签: php xml magento layout block

我创建了一个自定义模块,并尝试在购物车表之后和Totals框之前包含一个块。但我无法在那个确切的地方得到它。我可以让我的块出现在其他所有内容的内容部分中,但不在其间。

如果我覆盖checkout.xml和cart.phtml,那么我可以实现我想要显示块的位置,但我不想覆盖现有文件,因此我的自定义模块。有人可以指出我错过或做错了什么。

这是我的模块代码,

app/code/local/CM/Test/etc/config.xml

<?xml version="1.0"?>
<config>
<modules>
    <CM_Test>
        <version>0.1.0</version>
    </CM_Test>
</modules>
<frontend>
    <routers>
        <test>
            <use>standard</use>
            <args>
                <module>CM_Test</module>
                <frontName>test</frontName>
            </args>
        </test>
    </routers>
    <layout>
        <updates>
            <cm_test module="CM_Test">
                <file>test.xml</file>
            </cm_test>
        </updates>
    </layout>
</frontend>
<global>
<blocks>
    <test>
    <class>CM_Test_Block</class>
        </test>
</blocks>
</global>
</config>

app/code/local/CM/Test/Block/Somblock.php

  <?php
  class CM_Test_Block_Somblock extends Mage_Core_Block_Template
  {
   protected function _construct()
   {
    parent::_construct();
    $this->setTemplate('test/testing.phtml');
   }

   public function methodBlock()
   {
     return 'informations about my block !!' ;
   }
}

app/code/local/CM/Test/controllers/IndexController.php

 <?php
 class CM_Test_IndexController extends Mage_Core_Controller_Front_Action
 {
    public function indexAction()
    {
      $this->loadLayout();
      $this->renderLayout();
    }
    public function somethingAction()
    {
      echo 'test mamethode';
    }
 }

app/design/frontend/mytheme/layout/test.xml

   <layout version="0.1.0">
  <default></default>
  <test_index_index>
        <reference name="root">
          <action method="setTemplate"><template>page/2columns-right.phtml</template>       
              </action>
        </reference>
        <reference name="content">
              <block type="test/somblock" name="test.somblock" template="test/testing.phtml"/>
            </reference>
  </test_index_index>

  <checkout_cart_index>
  <reference name="checkout.cart.form.before">
        <block type="test/somblock" name="test.somblock">
              <action method="setTemplate"><template>test/testing.phtml</template></action> 
        </block>
        <block type="test/somblock" name="test.somblock" template="test/smtesting.phtml"/>      
  </reference>
  </checkout_cart_index>
 </layout>

app/design/frontend/default/mytheme/template/test/testing.phtml

 TESTING <br/>
 <?php 
 echo $this->getChildHtml('testing.somblock');
 echo "HELLO";

app/design/frontend/default/mytheme/template/test/smtesting.phtml

 <?php
 echo $this->methodBlock();

app/etc/modules/CM_Test.xml

 <?xml version="1.0"?>
 <config>
 <modules>
  <CM_Test>
   <codePool>local</codePool>
   <active>true</active>
  </CM_Test>
</modules>
</config>

当我访问http://mydomain.com/test/index/index时,它给了我以下o / p

TESTING HELLO

当我访问http://mydomain.com/checkout/cart/index时,它给了我以下o / p

output of my module

但是我需要在购物车表和Subtotals框之后输出information about my block,我该怎么做?

1 个答案:

答案 0 :(得分:0)

<checkout_cart_index>
    <reference name="checkout.cart">
        <block type="test/somblock" name="test.somblock" before="checkout.cart.totals" template="test/testing.phtml" />
        <block type="test/somblock" name="test.somblock" after="test.somblock" template="test/smtesting.phtml"/>      
    </reference>
</checkout_cart_index>

您指的是购物车前的表单,而您需要购物车中的表单。更改您的参考并在总计之前添加(或者如果您愿意,可以在折扣之前添加)。