`
cgzhang
  • 浏览: 72348 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Magento重载Controller的方法

阅读更多
重载购物车页
Mage_Checkout_CartController::indexAction().

第一步:建立相应的文件
app/code/local/MyNameSpace/MyModule/etc/config.xml
app/code/local/MyNameSpace/MyModule/controllers/Checkout/CartController.php
app/etc/modules/MyNameSpace_All.xml

第二步:编辑刚才新建的配置文件 etc/config.xml
写入如下的内容:
<?xml version="1.0"?>
<config>
    <modules>
        <MyNameSpace_MyModule>
            <version>0.1.0</version>
        </MyNameSpace_MyModule>
    </modules>
    <global>
        <!-- This rewrite rule could be added to the database instead -->
        <rewrite>
            <!-- This is an identifier for your rewrite that should be unique -->
            <!-- THIS IS THE CLASSNAME IN YOUR OWN CONTROLLER -->
            <mynamespace_mymodule_checkout_cart>
                <from><![CDATA[#^/checkout/cart/#]]></from>
                <!-- 
                    - mymodule matches the router frontname below 
                    - checkout_cart matches the path to your controller
                    
                    Considering the router below, "/mymodule/checkout_cart/" will be 
                    "translated" to "/MyNameSpace/MyModule/controllers/Checkout/CartController.php" (?)
                -->
                <to>/mymodule/checkout_cart/</to>
            </mynamespace_mymodule_checkout_cart>
        </rewrite>
    </global>
    <!-- 
    If you want to overload an admin-controller this tag should be <admin> instead,
    or <adminhtml> if youre overloading such stuff (?)
    -->
    <frontend>
        <routers>
            <mynamespace_mymodule>
                <!-- should be set to "admin" when overloading admin stuff (?) -->
                <use>standard</use>
                <args>
                    <module>MyNameSpace_MyModule</module>
                    <!-- This is used when "catching" the rewrite above -->
                    <frontName>mymodule</frontName>
                </args>
            </mynamespace_mymodule>
        </routers>
    </frontend>
</config>



第三步:编辑controllers/Checkout/CartController.php
写入如下:
<?php
# Controllers are not autoloaded so we will have to do it manually: 
//require_once 'Mage/Checkout/controllers/CartController.php';
//don’t break the magento compiler functionality and magento can find your class from compiled folder,better
require_once Mage::getModuleDir('controllers','Mage_Checkout').DS.'CartController.php';
class MyNameSpace_MyModule_Checkout_CartController extends Mage_Checkout_CartController
{
    # Overloaded indexAction
    public function indexAction()
    {
        # Just to make sure
        error_log('Yes, I did it!');
        parent::indexAction();
    }
}


第四步:编辑模块配置文件 app/etc/modules/MyNameSpace_All.xml
写入:
<?xml version="1.0"?>
<config>
    <modules>
        <MyNameSpace_MyModule>
            <active>true</active>
            <codePool>local</codePool>
        </MyNameSpace_MyModule>
    </modules>
</config>


第五步,编辑app/design/frontend/[myinterface]/[mytheme]/layout/checkout.xml
写入:
<mynamespace_mymodule_checkout_cart_index>
    <update handle="checkout_cart_index"/>
</mynamespace_mymodule_checkout_cart_index>


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics