Magento <layoutUpdate>против <layout> - PullRequest
       4

Magento <layoutUpdate>против <layout>

1 голос
/ 03 октября 2011

Я видел, по крайней мере, в одном файле макета XML использование узла <layoutUpdate> xml вместо типичного узла <layout version="0.1.0">. Я проверил паутины, а также любые книги и документы Magento Layout, которые у меня есть, но не могу найти объяснения по этому поводу. Сначала я думал, что есть разница в порядке, в котором применяются обновления, но после дальнейшего тестирования это не так. Может кто-нибудь объяснить, какие (если таковые имеются) различия между этими двумя?

Спасибо!

Пример

Типовая структура макета обновления XML-файла:

<?xml version="1.0"?>
<layout version="0.1.0">
    <some_handle>
        <reference name"some-block">
            ...
        </reference>
    </some_handle>
</layout>

Другая версия, которая все еще работает:

<?xml version="1.0"?>
<layoutUpdate>
    <some_handle>
        <reference name"some-block">
            ...
        </reference>
    </some_handle>
</layoutUpdate>

Есть ли функциональная разница между этими двумя?

Ответы [ 2 ]

3 голосов
/ 03 октября 2011

Тег должен быть <layout />.Однако в текущих версиях Magento (и, вероятно, в будущих версиях) имя этого тега не имеет значения.Эти файлы все объединены в одно дерево XML.Код, который Magento использует для загрузки этих файлов в одно дерево, выглядит следующим образом:

$fileStr = file_get_contents($filename);
$fileStr = str_replace($this->_subst['from'], $this->_subst['to'], $fileStr);
$fileXml = simplexml_load_string($fileStr, $elementClass);
if (!$fileXml instanceof SimpleXMLElement) {
    continue;
}
$layoutStr .= $fileXml->innerXml();

Последняя строка ($fileXml->innerXml();) - это та, которая нас интересует.Метод innerXml работает так же, как и метод DOM браузера с тем же именем.Все дочерние узлы будут извлечены в строку, но корневой узел будет игнорироваться.Вы могли бы назвать это <layout />, <layoutUpdate />, <i♥magento />.В настоящее время это не имеет значения.

Тем не менее, вы должны назвать это <layout />, чтобы не запутывать людей.

2 голосов
/ 03 октября 2011

XML-файл обновления макета модуля содержит корневой узел <layout />. Любой узел верхнего уровня, содержащийся в этом корневом узле, является дескриптором обновления макета. Дескрипторы обновления макета используются для хранения наборов XML-директив обновления макета. Номер версии для корневого узла никогда не оценивается (насколько мне известно).

Дескрипторы обновления макета по существу произвольны и могут быть любой XML-безопасной строкой. В зависимости от того, как или если действие контроллера, обрабатывающее запрос, использует обновления макета, определенные дескрипторы обновления макета вызываются в область.

Для получения дополнительной информации о связанных методах см. Следующее: Mage_Core_Controller_Varien_Action s loadLayout() и renderLayout() методы, Mage_Core_Model_Layout и Mage_Core_Model_Layout_Update.

...