7

例子

我的布局文件.xml

 <layout>
        <default>
            <reference name="header">
                <block type="mynamespace_mymodule/view" name="mynamespace_mymodule" output="toHtml" template="mymodule/html/view.phtml">
                    <action method="setTest"><param1>myparam1</param1><param2>myparam2</param2></action>
                </block>
            </reference>
        </default>
    </layout>

app/code/local/Mynamespace/Mymodule/Block/View.php

    class Mynamespace_Mymodule_Block_View extends Mage_Core_Block_Template{
        public $test = "before any params";
            public function setTest($passedparam1,$passedparam2){
             $this->test = $passedparam1 ." ". $passedparam2;
            }

}

应用程序/设计/.../.../mymodule/html/view.phtml

<?php
echo "<pre>";
print_r($this->test);  //myparam1 myparam2
echo"</pre>";
die();

解释

mylayoutfile 通过您的模块 config.xml 在更新中编译

mynamespace_module 的块类前缀也在您的模块 config.xml 中定义

mynamespace_module/view 设置为块类型并实例化,并设置 view.phtml 的输出文件

发生一个调用父节点块的方法 setTest 的操作,传递两个参数,其值为 myparam1 和 myparam2。

在 setTest 函数内部,类参数“test”设置为等于“myparam1 myparam2”

模板文件 app/design/.../.../mymodule/html/view.phtml 被加载,我们回显 $this->test 的值($this 指的是之前实例化的块类 Mynamespace_mymodule_Block_View)

问题

  1. 有哪些可以使用它的用例示例?
  2. 你能传递除字符串以外的任何东西吗?(对象,数组)?
  3. 自动设置器和获取器方法是否在布局文件中工作?
  4. 可以使用逻辑(if、then、foreach、else 等)吗?
  5. 有没有不应该使用这种方法的场景?
  6. 在布局文件中,我可能还缺少与块实例化相关的任何其他内容吗?
  7. 与布局文件中的操作有关的其他任何我可能会丢失的东西吗?
4

1 回答 1

14
  1. 可用于多用途模板。看看catalog.xmlsetTitle中的使用。
  2. 什么都可以通过。数组可以在布局 XML 中定义:

    <action method="setFoo">
        <arbitrary>
            <key1>val1</key1>
            <key2>val1</key2>
        </arbitrary>
    </action>
    

    此外,参数节点可以执行辅助方法,其返回值将作为值传入:

    <action method="setFoo">
        <arbitrary helper="foo/bar" />
    </action>
    

    这将实例化一个助手并运行一个方法:Mage::helper('foo')->bar(). 因此,返回值可以是您想要的任何值。此外,可以将 args 传递给子节点中的助手!

  3. 块 extend Varien_Object,所以是的,尽管 setter 是唯一合理的使用方法。
  4. 这没有直接的逻辑。最接近的是动作的属性,如果配置值为真ifconfig,它将使用提供的参数调用并处理动作。Mage::getStoreConfigFlag()
  5. “[c] 不能使用” - 不。“没关系”——是的。
  6. 有很多细微差别(这里太多了),但你已经有了很多。Alan Storm 在他的书No Frills Magento Layout中获得了所有细微差别;不过,没有什么比自己探索极限更好的了。
于 2012-12-07T02:15:08.360 回答