如何使用magento中的php文件覆盖社区块模块

时间:2014-05-27 08:44:53

标签: magento module magento-1.7 override magento-1.8

我想覆盖“Script.php”文件中的“社区”块。

将第三方模块覆盖为http://connect20.magentocommerce.com/community/Anaraky_GDRT_1

Magento版本:1.7.0

这是社区模块文件树:

-app
 - code 
  - community
   - Anaraky
    - Gdrt
     - Block
      - Script.php 

     - etc
      - Config.xml
     - Helper
      - Data.php
     - Module
      - Adminhtml
      - Observer.php

我想将Script.php文件覆盖到My Custom模块

这是我的自定义模块文件树:

- app 
  - code 
    - local 
      - Anarakyoverride 
       - Gdrtoverride 
        - Block 
          - Script.php 
        - etc
         - config.xml

另外,我已添加My Custom(Anarakyoverride_Gdrtoverride)模块的代码config.xml文件,如下代码

<?xml version="1.0"?>
<config>
    <modules>
        <Anarakyoverride_Gdrtoverride>
            <version>1.0.8</version>
        </Anarakyoverride_Gdrtoverride>
    </modules>
    <global>        
        <blocks>
            <gdrt>
                <class>Anarakyoverride_Gdrtoverride_Block</class>
            </gdrt>
        </blocks>
    </global>

</config>

任何人都可以帮助我并建议覆盖第三方模块吗?

模块的更多细节是http://connect20.magentocommerce.com/community/Anaraky_GDRT_1 自定义模块中安装的模块和覆盖script.php文件,即app / code / local / Anarakyoverride / Gdrtoverride / Block / Script.php

谢谢和问候, 维沙尔

1 个答案:

答案 0 :(得分:2)

在XML中尝试以下代码

    

<global>
    <modules>
        <Anarakyoverride_Gdrtoverride>
            <version>1.0.8</version>
        </Anarakyoverride_Gdrtoverride>
    </modules>
    <blocks>
        <gdrtoverride><class>Anarakyoverride_Gdrtoverride_Block</class></gdrtoverride>
        <gdrt>
            <rewrite>
                    <script>Anarakyoverride_Gdrtoverride_Block_Script</script>
            </rewrite>
        </gdrt>
    </blocks>
   /* Only if you want */
    <models>
        <gdrt>
            <rewrite>
                <state>Anarakyoverride_Gdrtoverride_Model_State</state>
            </rewrite>
        </gdrt>
    </models>
   /* Only if you want */
</global>   
<frontend>
  <layout>   
        <updates>   
            <gdrtoverride>   
                <file>gdrtoverride.xml</file>   
            </gdrtoverride>   
        </updates>   
    </layout>
</frontend>   
</config>

或仅阻止XML的节点

<blocks>
        <gdrtoverride>
            <class>Anarakyoverride_Gdrtoverride_Block</class>
        </gdrtoverride>
    <gdrt>
        <rewrite>
            <script>Anarakyoverride_Gdrtoverride_Block_Script</script>
        </rewrite>
    </gdrt>
</blocks>

然后在你的script.php中

<?php
   class Anarakyoverride_Gdrtoverride_Block_Script extends Anaraky_Gdrt_Block_Script
   {
        // create your method and write your code
   }

此外,您需要将此确切配置复制到模块配置 - 指定您的块类名 - 并且(重要!)确保发生以下情况:

  1. 您的配置是在社区模块之后加载的 构造
  2. 您的课程来自社区模块的课程。
  3. 要在社区模块之后加载模块配置,您可以在 app / etc / modules /

    中使用<depends>标记
    <depends>
        <Community_Module /> <!-- e.g. -->
    </depends>