这个案例的内容是,在magento前台输入两个数,然后输出结果。 这个案例的目的是 1.数值是如何在magento的Controllers传递到Block中的,又是如何在phtml文件中输出的。 2.controllers中的action使用。 3.了解使用form post参数和如何get参数。
首先来看下这个案例中的文件结构
/* 声明插件,指定codePool、插件开启状态等 */
app/etc/modules/Alwayly_Counter.xml
/* 模板.phtml文件中使用的方法在此文件中声明,此案例中此文件将计算结果传递到.phtml文件 */
app/code/local/Alwayly/Counter/Block/Counter.php
/* 我们此案例的的控制器 http://magento-root-folder/module-name/controller-name/action-neame 此例中IndexController控制器中的一个action获取counter.phtml中传来的参数,并将参数传递到Counter.php,在Counter.php中计算后将结果返回到counter.phtml输出 */
app/code/local/Alwayly/Counter/controllers/IndexController.php
/* 主要的插件配置文件 */
app/code/local/Alwayly/Counter/etc/config.xml
/* 前台显示模板的layout */
app/design/frontend/default/default/layout/counter.xml
* 前台模板文件,我们的form和结果最终就在这个文件输出,此文件直接使用$this->调用与其相应的block中的方法,本例中我们只使用这一个模板页面。 */
app/design/frontend/default/default/template/counter/counter.phtml
/* Helper此例不使用,放在这主要作用是显得气派,充门面 */
app/code/local/Alwayly/Counter/Helper/Data.php
我们先从简单的开始,那就先在前台的模板文件counter.phtml中写个提交的form吧
app/design/frontend/default/default/template/counter/counter.phtml文件中代码片段(详见本例文件)
<form action="" method="post" id="orderreport-form"> <fieldset> <ul> <li> <label for="NUM1"><?php echo $this->__('NUM1: ') ?><span class="required">*</span></label> <input type="text" id="NUM1" name="NUM1" class="input-text required-entry validate-alphanum" /> </li> <li> <label for="NUM2"><?php echo $this->__('NUM2: ') ?><span class="required">*</span></label> <input type="text" id="NUM2" name="NUM2" class="input-text required-entry validate-alphanum" /> </li> <li> <input type="submit" value="__('submit') ?>" /> </li> </ul> </fieldset> </form>
注意action="<!--?php echo Mage::getUrl('counter') ?-->" 等同于 action="<!--?php echo Mage::getUrl('counter/index/index') ?-->"
有数据的post了,我们就在counter/index/index这个path下的indexAction中接收这个参数 app/code/local/Alwayly/Counter/controllers/IndexController.php文件中代码片段(详见本例文件)
public function indexAction() { if ($this->getRequest()->isPost()){ /* 首先判断是否有post发生 */ $nu1 = $this->getRequest()->getParam('NUM1'); /* 截获参数 */ $nu2 = $this->getRequest()->getParam('NUM2'); Mage::register('nu1', $nu1);/* 传递到block */ Mage::register('nu2', $nu2); } $this->loadLayout(); $this->renderLayout(); }
既然在controllers中有了传递到block的方法,下一步就在block中获取 app/code/local/Alwayly/Counter/Block/Counter.php文件中代码片段(详见本例文件)
protected $nu1 = null ; protected $nu2 = null; public function showresult(){ $this->nu1 = Mage::registry('nu1'); /* 获得从controllers中传递来的参数 */ $this->nu2 = Mage::registry('nu2'); return $this->nu1 * $this->nu2; }
此block文件中的showresult()方法在phtml文件中可以试用$this->直接调用。 这样我们就差最后一步就是在我们的模板文件中输出结果了在app/design/frontend/default/default/template/counter/counter.phtml文件中添加输出结果的代码
<ul> <li>result:<?php echo $this->showresult(); ?></li> </ul>