Magento 自定义module

简介:


 创建Magento模块

由于我在做我自己的Magento项目,我将使用我自己的项目名“App”。 然后,我们要创建以下目录结构

Java代码   收藏代码
  1. app/code/local/App/Shopping/Block  
  2. app/code/local/App/Shopping/Controller //controllers基类  
  3. app/code/local/App/Shopping/controllers  
  4. app/code/local/App/Shopping/etc  
  5. app/code/local/App/Shopping/Helper  
  6. app/code/local/App/Shopping/Model  
  7. app/code/local/App/Shopping/sql  
Java代码   收藏代码
  1. class App_Shopping_Controller_Action extends Mage_Core_Controller_Front_Action{  
  2. }  

 

你的插件并不一定需要包含以上所有的目录,但是为了以后开发方便,我们还是在一开始就把目录创建好。接下来我们要创建两个文件,一个是config.xml,放在etc目录下面

Java代码   收藏代码
  1. app/code/local/App/Shopping/etc/config.xml  

文件内容如下

Java代码   收藏代码
  1. <config>  
  2.     <modules>  
  3.         <App_Shopping>  
  4.             <version>0.1.0</version>  
  5.         </App_Shopping>  
  6.     </modules>  
  7.  </config>  

第二个文件需要在如下位置创建

Java代码   收藏代码
  1. app/etc/modules/App_Shopping.xml  

第二个文件应该遵循如下命名规则“Packagename_Modulename.xml”,文件内容如下

Java代码   收藏代码
  1. <config>  
  2.      <modules>  
  3.          <App_Shopping>  
  4.              <active>true</active>  
  5.              <codePool>local</codePool>  
  6.          </App_Shopping>  
  7.      </modules>  
  8.  </config>  

该文件的目的是让Magento系统载入该模块。<active>标签为true表示使该模块生效。

也可以是Packagename_All.xml,里面配置所有 Module。

Java代码   收藏代码
  1. <?xml version="1.0"?>  
  2. <config>  
  3.      <modules>  
  4.         <App_Catalog>  
  5.             <active>true</active>  
  6.             <codePool>local</codePool>  
  7.         </App_Catalog>  
  8.         <App_Shopping>  
  9.             <active>true</active>  
  10.             <codePool>local</codePool>  
  11.         </App_Shopping>  
  12.      </modules>  
  13. </config>  

我们先不管这些文件是干什么的,以后会解释。建立好这两个文件以后,你的模块的骨架就已经完成了。Magento已经知道你的模块存在,但是现在你的模块不会做任何事情。我们来确认一下Magento确实装载了你的模块

  1. 清空Magento缓存
  2. 在后台管理界面,进入 System->Configuration->Advanced
  3. 展开“Disable Modules Output”
  4. 确认“App_shopping ”显示出来了

如果你看到“App_ shopping ”,那么恭喜你,你已经成功创建了你第一个Magento模块!

 

2创建的模块不会做任何事情,下面我们来为这个模块加入逻辑

首先在App下创建新的模块,依次创建如下文件:

Java代码   收藏代码
  1. /app/code/local/App/Shopping/controllers/CartController.php  
Java代码   收藏代码
  1. <?php  
  2. class App_Shopping_CartController extends  Mage_Core_Controller_Front_Action {  
  3.     public function indexAction() {  
  4.         echo 'Hello Magento';  
  5.         //显示layout中配置的block Shopping_Cart_index  
  6.         $this->loadLayout();  
  7.         $this->renderLayout();  
  8.     }  
  9. }  

编辑/app/code/local/App/Shopping/etc/config.xml文件,加入如下代码:

Java代码   收藏代码
  1. <?xml version="1.0"?>  
  2. <config>  
  3.     <modules>  
  4.         <app_shopping>  
  5.             <version>0.1.0</version>  
  6.         </app_shopping>  
  7.     </modules>  
  8.     <frontend>  
  9.         <routers>  
  10.             <app_shopping>  
  11.                 <use>standard</use>  
  12.                 <args>  
  13.                     <module>App_Shopping</module>  
  14.                     <!-- This is used when "catching" the rewrite above -->  
  15.                     <frontName>shopping</frontName>  
  16.                 </args>  
  17.             </app_shopping>  
  18.         </routers>  
  19.         <layout> <!-- 不配置layout标签默认读customer.xml-->  
  20.             <updates>  
  21.                 <app_shopping>  
  22.                     <file>shopping.xml</file>  
  23.                 </app_shopping>  
  24.             </updates>  
  25.         </layout>  
  26.     </frontend>  
  27. </config>  

frontend/routers/用来设置使该模块从前端显示的入口。frontName稍后将出现在url中 /shopping/cart

 

修改视图文件app/design/frontend/[myinterface]/[mytheme]/layout/shopping.xml在layout标签中,添加下面内容:

Java代码   收藏代码
  1. <ticket_index_index><!-- frontname_controller_action -->   
  2.     <update handle="customer_account"/>  
  3.     <reference name="my.account.wrapper">   
  4.         <block type="ticket/ticket" name="ticket" template="ticket/index.phtml"/><!-- 使用block文件 -->    
  5.     </reference>  
  6. </ticket_index_index>  

注意,XML的大小写敏感。 后台管理 System->Configuration->设计->主题 缺省。 来生效设置

添加后台的layout xml需要在config.xml添加adminhtml节点

Java代码   收藏代码
  1. <adminhtml>  
  2. <layout>  
  3.     <updates>  
  4.     <sintax>  
  5.         <file>sintax.xml</file>  
  6.     </sintax>  
  7.     </updates>  
  8. </layout>  
  9. </adminhtml>  

  文件: app/design/adminhtml/default/default/layout/sintax.xml

Java代码   收藏代码
  1. <?xml version="1.0"?>  
  2. <layout>  
  3.     <sintax_adminhtml_myform_index>  
  4.         <reference name="content">  
  5.             <block type="adminhtml/template" name="myform" template="sintax/myform.phtml"/>  
  6.         </reference>  
  7.     </sintax_adminhtml_myform_index>  
  8. </layout>  

Form 模板页 
文件: app/design/adminhtml/default/default/template/sintax/myform.phtml

Java代码   收藏代码
  1. <div class="content-header">  
  2.     <table cellspacing="0" class="grid-header">  
  3.         <tr>  
  4.             <td><h3><?php echo $this->__('My form title')?></h3></td>  
  5.             <td class="a-right">  
  6.                 <button onclick="editForm.submit()" class="scalable save" type="button"><span>Submit my form</span></button>  
  7.             </td>  
  8.         </tr>  
  9.     </table>  
  10. </div>  
  11. <div class="entry-edit">  
  12.     <form id="edit_form" name="edit_form" method="post" action="<?php echo $this->getUrl('*/*/post')?>">  
  13.         <h4 class="icon-head head-edit-form fieldset-legend"><?php echo $this->__('This fieldset name')?></h4>  
  14.         <fieldset id="my-fieldset">  
  15.             <table cellspacing="0" class="form-list">  
  16.                 <tr>  
  17.                     <td class="label"><?php echo $this->__('Field label')?> <span class="required">*</span></td>  
  18.                     <td class="input-ele"><input class="input-text required-entry" name="myform[myfield]" /></td>  
  19.                 </tr>  
  20.             </table>  
  21.         </fieldset>  
  22.     </form>  
  23. </div>  
  24. <script type="text/javascript">  
  25.     var editForm = new varienForm('edit_form');  
  26. </script>  

 自定义模块开发完后,需要程序自动创建MySQL脚本http://hudeyong926.iteye.com/blog/1670398

相关文章
A module cannot have multiple default exports.是、关闭Vetur扩展,或者重启项目,神奇的bug,复制代码造成的
A module cannot have multiple default exports.是、关闭Vetur扩展,或者重启项目,神奇的bug,复制代码造成的
|
6月前
|
JavaScript
vue : 无法加载文件 D:\module\npm_module\npm_modules\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.c
vue : 无法加载文件 D:\module\npm_module\npm_modules\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.c
|
7月前
|
JavaScript 前端开发
CMD和UMD,ES Module的差别
CMD和UMD,ES Module的差别
VSCode找不到自定义模块ModuleNotFoundError
VSCode找不到自定义模块ModuleNotFoundError
489 0
|
JavaScript 前端开发 Java
每天3分钟,重学ES6-ES12(八)ES11 ES12新增内容
每天3分钟,重学ES6-ES12(八)ES11 ES12新增内容
111 0
|
JavaScript 前端开发
每天3分钟,重学ES6-ES12(六)ES7 ES8 新增内容
每天3分钟,重学ES6-ES12(六)ES7 ES8 新增内容
123 0
|
前端开发 JavaScript 开发者
为普通样式表通过 modules 参数启用模块化|学习笔记
快速学习为普通样式表通过 modules 参数启用模块化
为普通样式表通过 modules 参数启用模块化|学习笔记
|
Java Linux 开发者
Powershell教程(2)——自定义模块Module语法
Powershell教程(2)——自定义模块Module语法
713 0
Powershell教程(2)——自定义模块Module语法
|
Java Linux 数据安全/隐私保护
ES 安装及配置介绍|学习笔记
快速学习 ES 安装及配置介绍。
145 0