从头开始创建模块(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
。 -
此功能现已完成。通过转到你的主页进行测试,你应该在每个页面的页脚中看到你的模块!