1.下面介绍的前提是你已经安装了magento ,版本是1.9.1.0。

2.下面是实际步骤

①在工程下面创建下面的文件目录

app/code/local/Magentotutorial/Helloworld/Block
app/code/local/Magentotutorial/Helloworld/controllers
app/code/local/Magentotutorial/Helloworld/etc
app/code/local/Magentotutorial/Helloworld/Helper
app/code/local/Magentotutorial/Helloworld/Model
app/code/local/Magentotutorial/Helloworld/sql
其中 ②

create a configuration file for the module (at path app/code/local/Magentotutorial/Helloworld/etc/config.xml):

<config>
<modules>
<Magentotutorial_Helloworld>
<version>0.1.0</version>
</Magentotutorial_Helloworld>
</modules>
</config>

Then create a file to activate the module (at path app/etc/modules/Magentotutorial_Helloworld.xml):

<config>
<modules>
<Magentotutorial_Helloworld>
<active>true</active>
<codePool>local</codePool>
</Magentotutorial_Helloworld>
</modules>
</config>

Finally, we ensure the module is active:

  1. Clear your Magento cache.
  2. In the Magento Admin, go to System->Configuration->Advanced.
  3. Expand "Disable Modules Output" (if it isn't already).
  4. Ensure that Magentotutorial_Helloworld shows up.

以上解释一下:

Module(模块)的全称是Magentotutorial_Helloworld,模块也可以是Helloworld

⑤配置路由

路由访问路径:

http://example.com/frontName/actionControllerName/actionMethod/

In your config.xml file(at path app/code/local/Magentotutorial/Helloworld/etc/config.xml), add the following section:

<config>
...
<frontend>
<routers>
<helloworld>
<use>standard</use>
<args>
<module>Magentotutorial_Helloworld</module>
<frontName>helloworld</frontName>
</args>
</helloworld>
</routers>
</frontend>
...
</config>
下面解释一下:

frontend我理解为前端的,是在地址栏中能看到的。

frontName就是helloworld,全是小写。

为什么有个标签是helloworld呢?This tag should be the lowercase version of you module name. Our module name is Helloworld, this tag is helloworld. Technically this tag defines our route name

这个标签应该是模块名的小写,我们的模块名是Helloworld,这里就要写helloworld,这个就定义了路由名称。

注意:

You'll also notice our frontName matches our module name. It's a loose convention to have frontNames match the module names, but it's not a requirement. In your own modules, it's probably better to use a route name that's a combination of your module name and package name to avoid possible namespace collisions.

你可以看到frontName跟module name是搭配的,仅仅是一个宽松的联系,但这并不是要求,在我们自己写的模块中,最好用的路由名是结合module名与包名。避免命名冲突。

What's <module>Magentotutorial_Helloworld</module> for?

This module tag should be the full name of your module, including its package/namespace name. This will be used by the system to locate your Controller files.

注:Magentotutorial可以理解为包名package/namespace name,被系统用来定位控制器文件的。

⑥Create Action Controller(s) for our Routes

为路由创建控制器

新建

app/code/local/Magentotutorial/Helloworld/controllers/IndexController.php 
代码:
<?php
class Magentotutorial_Helloworld_IndexController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
echo 'Hello World';
}
}
⑦清空缓存,访问如下url:
http://example.com/helloworld/index/index

http://example.com/helloworld/index/
http://example.com/helloworld/
看到Hello World就说明控制器成功了。
注:控制器php文件必须放在模块的controllers文件夹下面,系统将会按照路径去找。
控制器类如何命名:

An Action Controller's name will

  1. Start with this string specified in config.xml (Magentotutorial_Helloworld)
  2. Be followed by an underscore (Magentotutorial_Helloworld_)
  3. Which will be followed by the Action Controller's name (Magentotutorial_Helloworld_Index)
  4. And finally, the word "Controller" (Magentotutorial_Helloworld_IndexController)

All Action Controllers need Mage_Core_Controller_Front_Action as an ancestor.

模块全称_控制器名字(IndexController.php 中的IndexController),Mage_Core_Controller_Front_Action这个类是控制器的祖宗类。

http://example.com/frontName/actionControllerName/actionMethod/  访问方式。
the URI portion "helloworld" is the frontName, which is followed by index (The Action Controller name),
which is followed by another index, which is the name of the Action Method that will be called.
(an Action of index will call the method public function indexAction(){...}.
要学会 根据路径找方法:
根据路径找方法:
http://example.com/checkout/cart/add

Magento would

  1. Consult the global config to find the module to use for the frontName checkout (Mage_Checkout)
  2. Look for the cart Action Controller (Mage_Checkout_CartController)
  3. Call the addAction method on the cart Action Controller

先找全局config.xml找checkout这个frontName使用地方,找到cart控制器 ,找到控制器类中addAction这个方法。

还有一种方法:
public function paramsAction() {
echo '';
foreach($this->getRequest()->getParams() as $key=>$value) { echo 'Param: '.$key.''; echo 'Value: '.$value.''; } echo '';
}
访问这个地址http://example.com/helloworld/index/params?foo=bar&baz=eof
你会看到值会打印出来。
总结:
这篇文章主要用helloworld的例子讲解了magento的模块,模块结构,以及控制器的命名,控制器中的的方法怎么调用及反过来根据地址栏找相应的方法。

备注:学习资料就是magento官方文档。

链接:http://devdocs.magento.com/guides/m1x/magefordev/mage-for-dev-1.html

以helloworld为例讲解magento中控制器的工作的更多相关文章

  1. 第九节:详细讲解Java中的泛型,多线程,网络编程

    前言 大家好,给大家带来详细讲解Java中的泛型,多线程,网络编程的概述,希望你们喜欢 泛型 泛型格式:ArrayList list= new ArrayList(); ArrayList list= ...

  2. 举例讲解Python中的死锁、可重入锁和互斥锁

    举例讲解Python中的死锁.可重入锁和互斥锁 一.死锁 简单来说,死锁是一个资源被多次调用,而多次调用方都未能释放该资源就会造成死锁,这里结合例子说明下两种常见的死锁情况. 1.迭代死锁 该情况是一 ...

  3. 以python为例讲解闭包机制

    以python为例讲解闭包机制 缘起 在学习JS的过程中,总是无可避免的接触到闭包机制,尤其是接触到react后,其函数式的编程思想更是将闭包发扬光大,作为函数式编程的重要语法结构,python自然也 ...

  4. 从零开始讲解JavaScript中作用域链的概念及用途

    从零开始讲解JavaScript中作用域链的概念及用途 引言 正文 一.执行环境 二.作用域链 三.块级作用域 四.其他情况 五.总结 结束语 引言 先点赞,再看博客,顺手可以点个关注. 微信公众号搜 ...

  5. 详细讲解nodejs中使用socket的私聊的方式

    详细讲解nodejs中使用socket的私聊的方式 在上一次我使用nodejs+express+socketio+mysql搭建聊天室,这基本上就是从socket.io的官网上的一份教程式复制学习,然 ...

  6. 在magento中如何回复客户的评论

    magento — 在magento中如何回复客户的评论 发表于 2012 年 8 月 18 日 agento本身是不带 回复评论的功能的,现成的扩展(无论免费的还是商业的)也没找到,那就自己写一个吧 ...

  7. Magento中,调用静态块的几种方法

    在后台创建一个order_form静态块Block Title :Order FormIdentifier :order_formStatus :EnabledContent :自定义内容 1.如果要 ...

  8. MVC4.0 解决Controllers与Areas中控制器不能同名问题

    在使用MVC4.0的时候,难免会遇到在根目录下的Controllers中添加的控制器名称可能会跟在Areas中的某个区域下的控制器名称一样.这个时候访问Areas下面的Controller/Actio ...

  9. iPad中控制器view的width和height

    一.iPad中控制器view的width和height 1> 规律 * width 是宽高中最小的那个值 * height 是宽高中最大的那个值 2> 举例(比如窗口根控制器的view,有 ...

随机推荐

  1. TextArea中定位光标位置

    原文:TextArea中定位光标位置 在项目中,遇到一个场景:希望能在TextArea中输入某条记录中的明细(明细较简单,没有附属信息,只用记录顺序和值即可,譬如用"+"号来作为明 ...

  2. JS获取渲染后的样式

    一般我们利用element.style.属性来获取CSS的样式,而此方法只能获取标签内的样式,无法获取头部或引入的样式,因此,而我们又需要获取其样式,则我们可以使用:(其中element为标签,pro ...

  3. flash导入图片缩放后出现毛边、失真、锯齿、文字模糊不清晰的情况

    原因: 1.flash的性能非常差,这就不得不让它做大量的优化. 2.图片缩放,目前业界有多种算法,画质越好的算法,计算量越大. 3.flash优化了图片缩放,使用了质量非常低的缩放算法.这个做法,保 ...

  4. PHP 3:从Login界面谈PHP标记

    原文:PHP 3:从Login界面谈PHP标记 前一篇文章简要介绍了此实例.OK,我们就从第一个页面Login页面入手吧.还是看看界面怎么样,是不是很想指导它到底是如何实现的呢?好的,看看其代码吧: ...

  5. POJ 1655 Balancing Act 焦点树

    标题效果:鉴于一棵树.除去一个点之后,这棵树将成为一些中国联通的块.之后该点通过寻求取消最低形成块的最大数目. 思维:树DP思维.通过为每个子树尺寸的根节点深搜索确定.之后该节点然后除去,,还有剩下的 ...

  6. CSS学习笔记之元素分类

    在讲解CSS布局之前,我们需要提前知道一些知识,在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div> ...

  7. SQL Server 复制 - 发布订阅(SQL Server 数据同步)

    原文:SQL Server 复制 - 发布订阅(SQL Server 数据同步) SQL Server的同步是通过SQL Server自带的复制工具来实现的,分发布和订阅2大步. A,复制-发布 发布 ...

  8. sql材料分级统计及汇总案例参考

    --第一步:根据系统编号.列.单价分组求和 select CLBH,DJ,sum(SL) as SL,sum(JE) as JE,Lie into #TempSZCMX from #ShouZhiCu ...

  9. Jeffrey Richter's Power Threading Library

    Jeffrey Richter's Power Threading Library The Power Threading Library consists of a number of classe ...

  10. Django解决 'ascii' codec can't encode characters in position

    问题: 文件上传可以上传英文,无法上传中文的. 解决方法:对Apache进行配置 在/etc/apache2/envvars文件加上: export LANG='en_US.UTF-8'export ...