6

我想做上面的事情。我过去覆盖了许多文件......块,模型,助手......但是这个让我望而却步。

谁能看到我在这里做错了什么:(我编辑了这段代码......现在包括一些建议......)

这是我的文件夹结构(2个控制器位置作为测试):

/Idigital/Idgeneral/etc/config.xml
/Idigital/Idgeneral/controllers/Checkout/CartController.php
/Idigital/Idgeneral/controllers/CartController.php

这是我的 config.xml:

<?xml version="1.0"?>
<config>
<modules>
    <idigital_idgeneral>
    <version>0.1.0</version>
    </idigital_idgeneral>
</modules>
<global>
<blocks>
        <idgeneral><class>Idigital_Idgeneral_Block</class></idgeneral>
    </blocks>
</global>   

<frontend>
    <routers>
                <checkout>
                    <use>standard</use>
                    <args>
                        <modules>
                            <Idigital_Idgeneral before="Mage_Checkout">Idigital_Idgeneral_Checkout</Idigital_Idgeneral>
                        </modules>
                    </args>
                </checkout>
           </routers>
       <layout>   
        <updates>   
            <idgeneral>   
                <file>idigital.xml</file>   
            </idgeneral>   
        </updates>   
    </layout>
</frontend>
</config>

我已将我的控制器文件放在 2 个位置进行测试。这是我的第一个控制器文件的顶部:

require_once 'Mage/Checkout/controllers/CartController.php';
class Idigital_Idgeneral_Checkout_CartController extends Mage_Checkout_CartController
{


public function testAction()
{  
    var_dump('inside checkout/cart/test');exit; 
}

/**
 * Add product to shopping cart action
 */
public function addAction()
{
    blah...
}

回答我的第二个控制器:

require_once 'Mage/Checkout/controllers/CartController.php';
class Idigital_Idgeneral_CartController extends Mage_Checkout_CartController
{


public function testAction()
{  
    var_dump('inside cart/test');exit; 
}

/**
 * Add product to shopping cart action
 */
public function addAction()
{
    blah...
}

当我访问:/checkout/cart/add 我被定向到法师控制器......不是我的本地人。(我每个都有 var_dump stmts ..所以我可以看到哪个运行了)。

当我访问 /checkout/cart/test - 我得到一个 404 当我访问 /cart/add 或 cart/test - 我得到一个 404 当我访问 idgeneral/cart/test 或 idgeneral/cart/add - 我得到一个 404

4

5 回答 5

7
于 2012-10-09T05:02:44.037 回答
6
<Idigital_Idgeneral before="Mage_Checkout">Idgeneral_Checkout</Idigital_Idgeneral>

应该

<Idigital_Idgeneral before="Mage_Checkout">Idigital_Idgeneral_Checkout</Idigital_Idgeneral>

或尝试将您的自定义控制器移动到

../Idigital/Idgeneral/controllers/CartController.php

并使用

<Idigital_Idgeneral before="Mage_Checkout">Idigital_Idgeneral</Idigital_Idgeneral>

<modules>您的标签位置也有错误。它应该是:

<config>
    <modules>
        <idigital_idgeneral>
            <version>0.1.0</version>
        </idigital_idgeneral>
    </modules>
    <global>
    ...
    </global>   

    <frontend>
        ....
    </frontend>
...
</config>

<modules>不应该在里面<global>

这是一个关于如何将 Magento 视为 XML 的配置树转储的很好的教程:http: //alanstorm.com/magento_config

于 2012-07-05T19:21:48.903 回答
3

我把这个留给下一个被迫使用这辆老爷车的可怜的开发人员。这里的大部分说明都是从magento 文档中粘贴的,它喜欢它的来源,是一个扭曲的误导迷宫。好吧,抱怨够多了……

这在 1.8 版中对我有用

创建命名空间和模块:/app/code/local/MyNameSpace/MyModule

创建你的模块配置:/app/code/local/MyNameSpace/MyModule/etc/config.xml

<?xml version="1.0" ?>
<config>
<modules>
    <MyNameSpace_MyModule>
        <version>0.1.0</version>
    </MyNameSpace_MyModule>
</modules>
<frontend>
    <routers>
        <checkout>
            <args>
                <modules>
                    <MyNameSpace_MyModule before="Mage_Checkout">MyNameSpace_MyModule_Checkout</MyNameSpace_MyModule>
                </modules>
            </args>
        </checkout>
    </routers>
</frontend>

创建你的控制器:/app/code/local/MyNameSpace/MyModule/controllers/Checkout/CartController.php

<?php

require_once Mage::getModuleDir('controllers', 'Mage_Checkout').DS.'CartController.php';

class MyNameSpace_MyModule_Checkout_CartController extends Mage_Checkout_CartController
{
    public function indexAction() {
        // /var/log/debug.log should log the output
        Mage::log('cart index override', null, 'debug.log');

        // Call the parent class
        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>

这就是所有需要的。现在去庆祝吧,你刚刚擦亮了一个粪便!;)

于 2014-05-21T19:54:21.260 回答
1

这是关于控制器包含路径的一个小通知。

如果打开Magento 编译器模式,此包含路径可能会导致错误

require_once 'Mage/Checkout/controllers/CartController.php';

取而代之的是,它很好用

require_once Mage::getModuleDir('controllers', 'Mage_Checkout').DS.'CartController.php';

会更安全。

于 2014-01-23T09:47:00.913 回答
0

嗯...它不会覆盖结帐车控制器。

所以我在产品视图中使用了 URL REWRITE ......来自这个链接......靠近文章的底部。他们说这是一个正确的方法......

http://www.excellencemagentoblog.com/magento-add-product-to-cart-ajax

if(!url){
      url = jQuery('#product_addtocart_form').attr('action');
}
url = url.replace("checkout/cart","idgeneral/cart");

这对我有用。让我开裂。基本上调用我的控制器..而不是结帐控制器。

感谢 ROSCIUS 的帮助...感谢。

我还必须更改我的配置......我的路由器部分现在看起来像这样:

<routers>
        <!-- THIS PART REGISTERS OUR CONTROLLERS FOLDER FOR USE -->
        <idgeneral>
            <use>standard</use>
            <args>
                <module>Idigital_Idgeneral</module>
                <frontName>idgeneral</frontName>
            </args>
        </idgeneral>

        <!-- THIS PART WONT WORK TO OVERWRITE OUR MAGE CONTROLLER -->
        <checkout>
            <use>standard</use>
            <args>
                <modules>
                    <Idigital_Idgeneral before="Mage_Checkout">Idigital_Idgeneral_Checkout</Idigital_Idgeneral>
                </modules>
            </args>
        </checkout>
    </routers>
于 2012-07-06T08:38:03.523 回答