这个案例的内容是,在magento前台输入两个数,然后输出结果。
这个案例的目的是
1.数值是如何在magento的Controllers传递到Block中的,又是如何在phtml文件中输出的。
2.controllers中的action使用。
3.了解使用form post参数和如何get参数。
首先来看下这个案例中的文件结构
/* 声明插件,指定codePool、插件开启状态等 */
app/etc/modules/Hellokeykey_Counter.xml
/* 模板.phtml文件中使用的方法在此文件中声明,此案例中此文件将计算结果传递到.phtml文件 */
app/code/local/Hellokeykey/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/Hellokeykey/Counter/controllers/IndexController.php
/* 主要的插件配置文件 */
app/code/local/Hellokeykey/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/Hellokeykey/Counter/Helper/Data.php
我们先从简单的开始,那就先在前台的模板文件counter.phtml中写个提交的form吧,form我也忘了具体怎么写了,毕竟不天天写这个,没关系,我们有google,代码如下。
app/design/frontend/default/default/template/counter/counter.phtml文件中代码片段(详见本例文件)
<form action="<?php echo Mage::getUrl('counter') ?>" 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="<?php echo $this->__('submit') ?>" />
</li>
</ul>
</fieldset>
</form>
注意action="<?php echo Mage::getUrl('counter') ?>" 等同于 action="<?php echo Mage::getUrl('counter/index/index') ?>"
http://127.0.0.1/magento1324le/index.php/counter/index/index如果使用默认的IndexController.php中的index控制器,可以省略简写。
有数据的post了,我们就在counter/index/index这个path下的indexAction中接收这个参数
app/code/local/Hellokeykey/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/Hellokeykey/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->直接调用。
这样我们就差{zh1}一步就是在我们的模板文件中输出结果了在app/design/frontend/default/default/template/counter/counter.phtml文件中添加输出结果的代码
<ul>
<li>result:<?php echo $this->showresult(); ?></li>
</ul>
此例只做讲解试用,勿苛求太多,大家有所收获就好。
我来给大家打气:
我基本是凭着C语言的基础(C++也学的不行啊)来开始做magento插件的,一直google,希望大家和我一样,保持不懂是正常现象,懂才奇怪的心态,共同进步。
我的强项必须是magento模板,希望大家继续支持我,在magentokey.com 可以找到趁手的兵器,谢谢,也请路过的同志们留下买路钱,嘿嘿。
转载表明出处: hellokeykey.com hellokeykey工作室