2012-11-23 110 views
0

当我在“本地”结构中创建文件时,就像“核心”中的文件结构一样,Magento看不到这些更改。 为什么?可能是我需要更改一些其他文件? 我改变core/Mage/Cutomer/controllers/AcountController.php, 把改变后的文件放在local/Mage/Cutomer/controllers/AcountController.php, 但是没有效果。文件“本地”中的更改不起作用

Magento与“核心”文件一起工作。

+0

块,助手,模型一切都会在本地工作,但控制器不会,你必须在新模块中重写控制器并更新所需的功能。 – MTM

回答

-1

创建您自己的模块并编写一个挂钩到magento逻辑的观察器。

-1

我认为magento是以代码池为核心。 所以它开始在核心直接找到这个类。

所以你可以改变文件 应用程序 - >等 - >模块 - > Mage_All.xml 发现以下并更改codepool一样,改变

<Mage_Customer> 
     <active>true</active> 
     <codePool>local</codePool> 
     <depends> 
      <Mage_Eav/> 
      <Mage_Dataflow/> 
      <Mage_Directory/> 
     </depends> 
    </Mage_Customer> 
+0

不要以为这是正确的方式,改变核心功能。 –

+0

我发现这个问题相同:http://stackoverflow.com/questions/2916609/local-vs-core-contoller – Dolly

0

我个人认为,创建一个自定义模块是更好方式来做到这一点,因为你可以使用'ModuleName'作为描述来指示这个模块将对核心做些什么改变,并使其他开发者更容易修改你的代码。

app/code/local /MageIgniter/ModuleName/controllers/AcountController.php

<?php 
    require_once Mage::getModuleDir('controllers', 'Mage_Customer').DS.'AccountController.php'; 
    class MageIgniter_ModuleName_AccountController extends Mage_Customer_AccountController{ 

    } 

应用程序/代码/本地/ MageIgniter /模块名在/ etc/config.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
<modules> 
    <MageIgniter_ModuleName> 
    <version>0.0.1</version> 
    </MageIgniter_ModuleName> 
</modules> 
<frontend> 
    <routers> 
    <customer> 
     <args> 
     <modules> 
      <MageIgniter_ModuleName before="Mage_Customer">MageIgniter_ModuleName</MageIgniter_ModuleName> 
     </modules> 
     </args> 
    </customer> 
    </routers> 
</frontend> 
</config> 

/app/etc/modules/MageIgniter_ModuleName.xml

<config> 
    <modules> 
     <MageIgniter_ModuleName> 
      <active>true</active> 
      <codePool>local</codePool> 
     </MageIgniter_ModuleName> 
    </modules> 
</config> 

更多@

How to extend Magento core controller?

Magento: Overriding Core Files (Blocks, Models, Resources, Controllers)