这个案例的内容是,在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>