如何使用Magento布局xml文件中的操作方法

aja*_*olf 7 php xml block magento

例子

mylayoutfile.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>
Run Code Online (Sandbox Code Playgroud)

应用程序/代码/本地/ myNameSpace对象/ Mymodule中/座/ 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;
            }

}
Run Code Online (Sandbox Code Playgroud)

应用程序/设计/.../.../ mymodule中/ HTML/view.phtml

<?php
echo "<pre>";
print_r($this->test);  //myparam1 myparam2
echo"</pre>";
die();
Run Code Online (Sandbox Code Playgroud)

说明

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. 自动设置器和getter方法是否可以在布局文件中工作?
  4. 可以使用逻辑(如果,然后,foreach,否则等)?
  5. 是否有任何不应使用此方法的方案?
  6. 在布局文件中是否还有其他与块实例化相关的缺失?
  7. 在布局文件中还有其他与布拉文件中的操作相关的内容吗?

ben*_*rks 14

  1. 可用于多功能模板.看看使用setTitle的catalog.xml.
  2. 任何事都可以通过.可以在布局XML中定义数组:

    <action method="setFoo">
        <arbitrary>
            <key1>val1</key1>
            <key2>val1</key2>
        </arbitrary>
    </action>
    
    Run Code Online (Sandbox Code Playgroud)

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

    <action method="setFoo">
        <arbitrary helper="foo/bar" />
    </action>
    
    Run Code Online (Sandbox Code Playgroud)

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

  3. 块扩展Varien_Object,所以是的,虽然setter是唯一合理的使用者.
  4. 这没有直接的逻辑.最接近的是action的ifconfig属性,它将Mage::getStoreConfigFlag()使用提供的参数调用,并在配置值为true时处理操作.
  5. "[c]不应该使用" - 没有."无所谓" - 是的.
  6. 有很多细微差别(这里有太多细节),但你已经有了很多.Alan Storm在他的书" No Frills Magento Layout "中获得了所有细微之处; 没有什么可以自己探索极限.