Понимание формата XML-файла Magento (ссылка, блок, ...) - PullRequest
5 голосов
/ 01 февраля 2012

У меня есть несколько вопросов о XML-файле макета, который находится в app \ design \ adminhtml \ default \ default \ layout.

В некоторых уроках она имела такую ​​структуру:

<layout>
    <adminhtml_example_index>
        <reference name="content">
            <block type="awesome/adminhtml_example" name="example" />
         </reference>
    </adminhtml_example_index>

    <adminhtml_example_edit>
        <reference name="content">
            <block type="awesome/adminhtml_example_edit" name="example_edit" />
        </reference>
    </adminhtml_example_edit>
</layout>

Может кто-нибудь объяснить, что означают эти строки? Учебник можно найти здесь: здесь

Спасибо!

Ответы [ 2 ]

14 голосов
/ 14 февраля 2013

Структура на основе XML Magento вначале кажется немного запутанной и раздражающей, но хорошо известно, что в конечном итоге широкие возможности и возможности настройки ...

<adminhtml_example_index></adminhtml_example_index>

Этот тег относится к [маршрутизатор] [контроллер] [действие] Маршрутизатор - это уникальное имя для конкретной отправки.Из приведенного вами примера под тегом admin файла config.xml мы можем найти имя маршрутизатора adminhtml.

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <awesome before="Mage_Adminhtml">Super_Awesome_Adminhtml</awesome>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>

Под этим маршрутизатором находятся настройки модуля, относящиеся к этому маршрутизатору.

Так что, если URL содержит / admin / example / [index] , magento найдет правильный маршрутизатор, равный <adminhtml>, тогданайдет контроллер с именем example и найдет правильное действие, которое в этом случае index (/ admin / example / будет отправлено на действие индекса по умолчанию)

<adminhtml_example_index>
    <reference name="content">
        <block type="awesome/adminhtml_example" name="example" />
    </reference>
</adminhtml_example_index>

В файле макета для комбинаций действия контроллера маршрутизатора определены обновления макета.Здесь обновление будет применено к основному блоку с именем content, который содержит раздел содержимого страницы. Тег

<block> используется для определения блока, к которому мы должны обратиться.Тег <type> важен.Он относится к правильному классу блоков, который должен использоваться при рендеринге этого макета (помните, что в структуре MVC Magento представление состоит как из классов блоков, так и из файлов phtml)

в awesome/adminhtml_example здесь,awesome - это имя конфигурации блока, указанное в файле config.xml .adminhtml_example является классом блока, который будет использоваться.

См.

<global>
    -----
    <blocks>
        <awesome>
            <class>Super_Awesome_Block</class>
        </awesome>
    </blocks>
</global>

Под тегом block определено уникальное имя блока (хорошее соглашение об именах сохранит уникальность) .Тогда путь к классам для этих блоков можно определить как Super/Awsome/Block/.

Имя конфигурации блока теперь разрешено.adminhtml_example является точным классом блока, который будет использоваться.Любое подчеркивание после имени блока (удивительно) будет преобразовано в разделитель каталогов.

В соответствии с этим полный путь к классу блоков будет

[codepool]/Super/Awsome/Block/Adminhtml/Example.php

.имя класса будет выглядеть так:

class Super_Awesome_Block_Adminhtml_Example extends ….

Если у нас есть файл макета, мы можем указать его здесь ... тогда этот файл .phtml будет отображаться с использованием приведенного выше класса блока

<reference name="root">
    <block type="page/html" name="root" template="simplepage.phtml" />
</reference>

Надеюсь, это поможет .. Извините, если что-то неясно ...

5 голосов
/ 01 февраля 2012
Обработчики макета

сопоставлены с контроллером MVC, поэтому ожидайте, что ваш обработчик

<adminhtml_example_index> будет использоваться на странице контроллера adminhtml / example / index

и

<reference name="content">означает, что блоки или другие ссылки внутри этих блоков будут доступны в блоке content на ваших шаблонах тем

для дальнейшего чтения. Я предлагаю:

...