Magento 无法覆盖控制器的操作
Magento unable to override an action of a controller
我需要覆盖 code/core/Mage/ProductAlert/controllers
的 AddController.php
中的 stockAction()
。所以我搜索了很多以了解如何进行,并得到了这个:
/etc/modules/Totem_ProductAlert.xml
<?xml version="1.0"?>
<config>
<modules>
<Totem_ProductAlert>
<active>true</active>
<codepool>local</codepool>
</Totem_ProductAlert>
</modules>
</config>
/code/local/Totem/ProductAlert/etc/config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Totem_ProductAlert>
<version>0.0.1</version>
</Totem_ProductAlert>
</modules>
<frontend>
<routers>
<productalert>
<args>
<modules>
<Totem_ProductAlert before="Mage_ProductAlert">Totem_ProductAlert</Totem_ProductAlert>
</modules>
</args>
</productalert>
</routers>
</frontend>
</config>
/code/local/Totem/ProductAlert/controllers/AddController.php
class Totem_ProductAlert_AddController extends Mage_ProductAlert_AddController
{
public function stockAction()
{
Mage::log('test', null, 'Test.log');
}
但是操作没有被覆盖,也没有创建 Test.log。
有人知道我哪里搞砸了吗?
谢谢。
试试这个
<?xml version="1.0"?>
<config>
<modules>
<Totem_ProductAlert>
<active>true</active>
<codePool>local</codePool>
<version>0.1.0</version>
</Totem_Custom>
</modules>
</config>
config.xml
<?xml version="1.0"?>
<config>
<modules>
<Totem_ProductAlert>
<version>0.1.0</version>
</Totem_ProductAlert>
</modules>
<frontend>
<routers>
<productalert>
<use>standard</use>
<args>
<module>Totem_ProductAlert</module>
<frontName>productalert</frontName>
</args>
</productalert>
</routers>
</frontend>
<global>
<rewrite>
<totem_productalert_productalert_addcontroller>
<from><![CDATA[#^/productalert/add/#]]></from> <!-- Mage_ProductAlert_AddController -->
<to>/productalert/productalert_add/</to> <!-- Totem_ProductAlert_ProductAlert_AddController -->
</totem_productalert_productalert_addcontroller>
</rewrite>
<helpers>
<productalert>
<class>Totem_ProductAlert_Helper</class>
</productalert>
</helpers>
</global>
<admin>
<routers>
<productalert>
<use>admin</use>
<args>
<module>Totem_ProductAlert</module>
<frontName>admin_productalert</frontName>
</args>
</productalert>
</routers>
</admin>
</config>
控制器
<?php
require_once "Mage/ProductAlert/controllers/AddController.php";
class Totem_ProductAlert_ProductAlert_AddController extends Mage_ProductAlert_AddController{
public function stockAction(){
Mage::log('test', null, 'Test.log');
}
}
你的代码有问题:
- Totem_ProductAlert.xml中的一个
syntax issue
。 <codepool>
应该
be <codePool>
.p 应该是大写字母.
<?xml version="1.0"?>
<config>
<modules>
<Totem_ProductAlert>
<active>true</active>
<codePool>local</codePool>
<depends>Mage_ProductAlert</depends>
</Totem_ProductAlert>
</modules>
</config>
- 要求调用正确包括核心AddController.php在
Totem_ProductAlert_AddController
class
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
* Description of AddController
*
* @author work
*/
require_once Mage::getModuleDir('controllers', 'Mage_ProductAlert').DS.'AddController.php';
class Totem_ProductAlert_AddController extends Mage_ProductAlert_AddController
{
public function stockAction()
{
Mage::log('test', null, 'Test.log',true);
}
}
我需要覆盖 code/core/Mage/ProductAlert/controllers
的 AddController.php
中的 stockAction()
。所以我搜索了很多以了解如何进行,并得到了这个:
/etc/modules/Totem_ProductAlert.xml
<?xml version="1.0"?>
<config>
<modules>
<Totem_ProductAlert>
<active>true</active>
<codepool>local</codepool>
</Totem_ProductAlert>
</modules>
</config>
/code/local/Totem/ProductAlert/etc/config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Totem_ProductAlert>
<version>0.0.1</version>
</Totem_ProductAlert>
</modules>
<frontend>
<routers>
<productalert>
<args>
<modules>
<Totem_ProductAlert before="Mage_ProductAlert">Totem_ProductAlert</Totem_ProductAlert>
</modules>
</args>
</productalert>
</routers>
</frontend>
</config>
/code/local/Totem/ProductAlert/controllers/AddController.php
class Totem_ProductAlert_AddController extends Mage_ProductAlert_AddController
{
public function stockAction()
{
Mage::log('test', null, 'Test.log');
}
但是操作没有被覆盖,也没有创建 Test.log。
有人知道我哪里搞砸了吗?
谢谢。
试试这个
<?xml version="1.0"?>
<config>
<modules>
<Totem_ProductAlert>
<active>true</active>
<codePool>local</codePool>
<version>0.1.0</version>
</Totem_Custom>
</modules>
</config>
config.xml
<?xml version="1.0"?>
<config>
<modules>
<Totem_ProductAlert>
<version>0.1.0</version>
</Totem_ProductAlert>
</modules>
<frontend>
<routers>
<productalert>
<use>standard</use>
<args>
<module>Totem_ProductAlert</module>
<frontName>productalert</frontName>
</args>
</productalert>
</routers>
</frontend>
<global>
<rewrite>
<totem_productalert_productalert_addcontroller>
<from><![CDATA[#^/productalert/add/#]]></from> <!-- Mage_ProductAlert_AddController -->
<to>/productalert/productalert_add/</to> <!-- Totem_ProductAlert_ProductAlert_AddController -->
</totem_productalert_productalert_addcontroller>
</rewrite>
<helpers>
<productalert>
<class>Totem_ProductAlert_Helper</class>
</productalert>
</helpers>
</global>
<admin>
<routers>
<productalert>
<use>admin</use>
<args>
<module>Totem_ProductAlert</module>
<frontName>admin_productalert</frontName>
</args>
</productalert>
</routers>
</admin>
</config>
控制器
<?php
require_once "Mage/ProductAlert/controllers/AddController.php";
class Totem_ProductAlert_ProductAlert_AddController extends Mage_ProductAlert_AddController{
public function stockAction(){
Mage::log('test', null, 'Test.log');
}
}
你的代码有问题:
- Totem_ProductAlert.xml中的一个
syntax issue
。<codepool>
应该 be<codePool>
.p 应该是大写字母.
<?xml version="1.0"?>
<config>
<modules>
<Totem_ProductAlert>
<active>true</active>
<codePool>local</codePool>
<depends>Mage_ProductAlert</depends>
</Totem_ProductAlert>
</modules>
</config>
- 要求调用正确包括核心AddController.php在
Totem_ProductAlert_AddController
class
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
* Description of AddController
*
* @author work
*/
require_once Mage::getModuleDir('controllers', 'Mage_ProductAlert').DS.'AddController.php';
class Totem_ProductAlert_AddController extends Mage_ProductAlert_AddController
{
public function stockAction()
{
Mage::log('test', null, 'Test.log',true);
}
}