从头开始创建模块(Hello World)

Magento 自定义模块开发是任何 Magento 开发或 Magento 项目的核心部分,因为在任何阶段你都可能希望将自己的功能/模块集成到现有的 Magento 项目中。

开发人员应该禁用的第一件事是系统缓存。否则,开发将变得很痛苦,因为任何更改都需要刷新。从 magento 管理面板:导航到 System > Cache Management > Select All > Actions : Disable. 使用以下指南创建新模块:

  • app/code/local/中创建一个文件夹 - 命名约定通常采用你公司的名称,例如 app/code/local/<YOUR_COMPANY>

  • 现在我们有一个模块的自定义位置。创建另一个目录,将其称为与你要创建的模块类型相关的内容,例如 app / code / local / <YOUR_COMPANY> / HelloWorld / - 我将称之为 HelloWorld

  • 这个目录需要一个 config.xml,所以 Magento 将它识别为一个新模块。创建另一个名为 etc 的文件夹。接下来是一个名为 config.xml 的 xml 文件。该目录应该看起来像 app/code/local/<YOUR_COMPANY/HelloWorld/etc/config.xml 这是 xml 文件的结构:

    <?xml version="1.0" encoding="UTF-8" ?>
    <config>
       <modules>
          <YOUR_COMPANY_HelloWorld>
             <version>0.0.1</version>
          </YOUR_COMPANY_HelloWorld>
       </modules>
    </config>
    
  • 接下来,需要向 Magento 声明模块。继续 app/etc/modules。创建另一个 XML 文档并为其选择标签名称:YOUR_COMPANY_HelloWorld 就我而言。在这份文件中写道:

    <?xml version="1.0" encoding="UTF-8"?>
    <config>
       <modules>
          <YOUR_COMPANY_HelloWorld>   
             <!-- Whether our module is active: true or false -->
             <active>true</active>
             <!-- Which code pool to use: core, community or local -->
             <codePool>local</codePool>
          </YOUR_COMPANY_HelloWorld>
       </modules>
    </config>
    
  • 配置和模块标签再次用于向 Magento 声明一个新模块。Active 是默认值,可以在 Admin Panel under System > Configuration > Advanced 中访问。codePool 告诉 Magento 在我们的情况下查看哪个目录 .local

  • 该模块现已建立,因此我们的 MVC 结构模型。你应该可以在 System > Configuration > Advanced 下的管理面板中看到你的新模块。但是,它还没有做任何事情! 你需要返回我们的 config.xml 文件并定义 XML 元素。

  • 继续教程; 我们将使用其中一些 XML 元素来创建类并操作我们站点前端的所有页面。回到 config.xml 文件,在 </modules> 标签下面写下:

    <global>
       <!-- adding a new block definition -->
       <blocks>
           <!-- A unique short name for our block files -->
           <helloworld>
              <!-- the location of our modules block -->
              <class>YOUR_COMPANY_HelloWorld_Block</class>
           </helloworld>
       </blocks>
    </global>
    <!-- We are making changes to the frontend -->
    <frontend>
       <!-- We are making changes to the layout of the front end -->
       <layout>
          <!-- we are adding a new update file -->
          <updates>
             <!-- Creating the name of our update and linking it the module -->
             <helloworld module="YOUR_COMPANY_HelloWorld">
                 <!-- The name of the layout file we are adding -->
                 <file>helloworld.xml</file>
             </helloworld>
         </updates>
      </layout>
    </frontend>
    
  • 正如你所看到的,我们不断扩展而不是操作核心文件。helloworld 标签是小写的,因为它将指向 Handle,为了连续性,我们将尽可能地命名。然后我们将其链接到 YOUR_COMPANY_HelloWorld 模块。

  • 我们正在改变布局。因此,我们需要在布局目录中创建此 Handle。前往 app/design/frontend/base/default/layout。我们告诉模块寻找 helloworld.xml 文件。因此,我们必须在此目录中创建它。你在等什么。做吧!! 并用以下内容填充:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- All Layout files begin with this code -->
    <layout>
       <!-- this is the layout handle. Default is handled on all pages. We want this module to execute on all pages -->
       <default>
          <!-- This is the block we want to bolt onto the existing before_body_end block -->
          <reference name="before_body_end">
              <!-- We define our new block and template to be added to before_body_end -->
              <block name="helloworld_footer" template="helloworld/footer.phtml" type="helloworld/footer"/>
          </reference>
       </default>
    </layout>
    
  • 现在那些拥有 Magento 经验,或者已经阅读了更多值得关注的 Magento 教程的人,可能会因为我们正在进行基本/默认更改而烦恼,因为这是 Magento 核心文件所在的位置。但是,我们没有在这里修改任何文件,我们正在创建新的文件,而且我们在文件名前加上 helloworld,因此很少有机会与其他模块发生冲突或导致升级 Magento 的任何问题。未来。快乐的时光!

  • 因为我们想要影响所有页面,所以我们使用默认标签并将其引用到 before_body_end 结构块。这将扮演 Action 的角色并触发我们的 MVC 结构的 View 部分。

  • 现在我们知道我们正在使用 before_body_end 区块。并将其链接到我们的自定义块。这称为引用,是一个钩子。我们目前没有把它挂钩到现有的任何东西,因此我们必须创建必要的文件。

  • helloworld.xml,我们在模板中说了一个 footer.phtml。继续 app/design/frontend/base/default/template 并创建一个目录 helloworld

  • 在这个目录中创建 footer.phtml 文件并用 HTML 填写,本教程只是写这个来显示一些与我们的 PHTML 文件链接的 PHP 功能:

    <p>Hello Everyone! Todays date is <?php echo $this->getDate() ?></p>
    
  • 我们现在需要创建自己的块对象,以将模板与块功能结合起来。创建目录 app / code / local / YOUR_COMPANY / HelloWorld / Block /并在其中创建文件 Footer.php。这在我们的 zeta_layout.xml 中引用了“helloworld / footer”类型。使用以下命令填充此文件:

    <?php
    class YOUR_COMPANY_HelloWorld_Block_Footer extends Mage_Core_Block_Template {
       public function getDate() {
          $date = date('Y-m-d');
          return urlencode($date);
       }
    }
    ?>
    
  • 这个功能将填充我们从 .phtml 文件中调用的 getDate()。我们扩展了 Mage_Core_Block_Template

  • 此功能现已完成。通过转到你的主页进行测试,你应该在每个页面的页脚中看到你的模块!