2014-11-18 2 views
0

Я хотел бы понять разницу в примерах кодов, которые я нашел в разных ресурсах, чтобы вставить блок, хотя файл Magento local.xml.Magento различные примеры для вставки существующего блока

<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> 

Метод действия одинаковый для каждого подхода, но имя разницы параметров. Кажется, что каждый пример работает нормально, так в чем разница между использованием «name», «block» или «blockName» в этом контексте?

Заранее спасибо.

ответ

1

Таким образом, вы в основном говорите Magento о вызове метода «вставить» блока, указанного родительским узлом вашего узла действия. (или в приложении/code/core/Mage/Core/Block/Abstract.php)

Magento не заботится о имени дочерних узлов, а только о его значении.

Вы можете смотреть в приложение/код/​​ядро ​​/ Mage/CORE/Модель/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); 

Итак, что касается аргумента tagName, результат будет таким же.

Cheers,

Смежные вопросы