Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml Magento插入现有块的不同示例_Xml_Magento_Block - Fatal编程技术网

Xml Magento插入现有块的不同示例

Xml Magento插入现有块的不同示例,xml,magento,block,Xml,Magento,Block,我想了解我在不同资源中找到的通过Magento local.xml文件插入块的示例代码的差异 <action method="insert"><name>catalog.compare.sidebar</name></action> <action method="insert"><block>catalog.compare.sidebar</block></action> <action

我想了解我在不同资源中找到的通过Magento local.xml文件插入块的示例代码的差异

<action method="insert"><name>catalog.compare.sidebar</name></action>

<action method="insert"><block>catalog.compare.sidebar</block></action>

<action method="insert"><blockName>catalog.compare.sidebar</blockName></action>
catalog.compare.sidebar
catalog.compare.sidebar
catalog.compare.sidebar
每个方法的操作方法相同,但参数的名称不同。 每个例子似乎都很好,那么在这个上下文中使用“name”、“block”或“blockName”有什么区别呢


提前感谢。

通过这种方式,您基本上告诉Magento调用由动作节点的父节点指定的块的“插入”方法。 (或在app/code/core/Mage/core/Block/Abstract.php中)

Magento不关心子节点的名称,只关心它们的值

您可以在app/code/core/Mage/core/Model/Layout.php中观看

public function generateBlocks($parent=null)
{
        if (empty($parent)) {
            $parent = $this->getNode();
        }
        foreach ($parent as $node) {
            $attributes = $node->attributes();
            if ((bool)$attributes->ignore) {
                continue;
            }
            switch ($node->getName()) {
                case 'block':
                    $this->_generateBlock($node, $parent);
                    $this->generateBlocks($node);
                    break;

                case 'reference':
                    $this->generateBlocks($node);
                    break;

                case 'action':
                    // WE GO HERE WHEN WE HAVE AN ACTION NODE
                    $this->_generateAction($node, $parent); 
                    break;
            }
        }
}
然后,当您查看_generateAction()时,我不会粘贴所有方法:

.... 

$args = (array)$node->children();

....

call_user_func_array(array($block, $method), $args);
因此,无论参数标记名是什么,结果都是相同的

干杯