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

相关文章
|
9月前
|
JavaScript 前端开发 应用服务中间件
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
213 0
|
5月前
|
存储 JavaScript 前端开发
[JS] ES Modules的运作原理
【9月更文挑战第16天】ES Modules(ECMAScript Modules)是 JavaScript 中的一种模块化开发规范,适用于浏览器和 Node.js 环境。它通过 `export` 和 `import` 关键字实现模块的导出与导入。模块定义清晰,便于维护和测试。JavaScript 引擎会在执行前进行静态分析,确保模块按需加载,并处理循环依赖。ES Modules 支持静态类型检查,现代浏览器已原生支持,还提供动态导入功能,增强了代码的灵活性和性能。这一规范显著提升了代码的组织和管理效率。
100 1
A module cannot have multiple default exports.是、关闭Vetur扩展,或者重启项目,神奇的bug,复制代码造成的
A module cannot have multiple default exports.是、关闭Vetur扩展,或者重启项目,神奇的bug,复制代码造成的
|
JavaScript 前端开发
每天3分钟,重学ES6-ES12(十八)ES Module(一)
每天3分钟,重学ES6-ES12(十八)ES Module
114 0
|
JavaScript 前端开发
每天3分钟,重学ES6-ES12(十八)ES Module(二)
每天3分钟,重学ES6-ES12(十八)ES Module
101 0
|
JavaScript 前端开发 API
【ES6】Module模块详解
【ES6】Module模块详解
238 0
|
前端开发 JavaScript 开发者
为普通样式表通过 modules 参数启用模块化|学习笔记
快速学习为普通样式表通过 modules 参数启用模块化
为普通样式表通过 modules 参数启用模块化|学习笔记
|
Java Linux 开发者
Powershell教程(2)——自定义模块Module语法
Powershell教程(2)——自定义模块Module语法
736 0
Powershell教程(2)——自定义模块Module语法
|
Java Android开发
Java工具IDEA创建模块(Module)、如何创建 Module:、如何删除模块
Java工具IDEA创建模块(Module)、如何创建 Module:、如何删除模块
Java工具IDEA创建模块(Module)、如何创建 Module:、如何删除模块
|
前端开发 JavaScript
为普通样式表通过modules参数启用模块化
一、为普通样式表通过modules参数启用模块化 二、解决css样式表作用域冲突问题的方法 三、总结
为普通样式表通过modules参数启用模块化