magento插件教程-2- magento计算器

magento插件教程

这个案例的内容是,在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->直接调用。

这样我们就差最后一步就是在我们的模板文件中输出结果了在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工作室

《magento插件教程-2- magento计算器》有7个想法

  1. 我这报错啊,求钥匙哥看看:
    magento版本是1.6
    下载文件并覆盖到相关目录,只是把修改成会报
    Invalid method Mage_Page_Block_Html::showresult(Array
    ………..
    这个错误,如果不改的话会显示不出模板。

  2. 刚才发的好像显示不全
    在发次,看钥匙哥啥时有时间帮看看
    magento版本是1.6
    下载文件并覆盖到相关目录,只是把layout文件中的block的type值counter/counter修改成page/html 会报
    Invalid method Mage_Page_Block_Html::showresult(Array
    ………..
    这个错误,如果不改的话会显示不出模板。

      1. 谢谢钥匙,原因找到了,是我的config.xml文件有个标签字母字反了,导致无法正常显示。
        今天又遇到一个问题,纠结我好几天了。麻烦钥匙有空在帮我看看。情况是这样。
        1.5运行正常的模块在1.6报Warning: include(Deallong_Tags_Helper_Data.php)failed to open stream: No such file …这个错误。
        按照提示建立相应的文件后还是报这样的错误。而1.5则正常,是版本问题还是啥问题呢???
        这跟1.5报Warning: include(DeallongTagsHelperData.php)failed to open stream: No such file …错误信息有什么区别吗?

  3. $nu1 = $this->getRequest()->getParam(‘NUM1’);(在IndexController.php中)的$this 是什么意思? 是那个的对象?

评论已关闭。