что должно быть в атрибуте типа блока


Я думаю, что я в замешательстве, потому что, продвинувшись так далеко в изучении magento, я теперь испытываю это основное сомнение.

Проблема в том, что я создал новый блок в макете моей созданной папки тем. Вещь, которую я не могу понять, - это то, каким должно быть значение атрибута "тип" элемента компоновки блока?

Я знаю, что атрибут "тип" относится к классам php, но чего я не могу понять, так это то, какое имя класса php я должен назначить как "тип" атрибут элемента компоновки блока?

Блок, как показано ниже, имеет тип "" --> page/html_header. ( Я не знаю, почему он отображает нормально с этим значением атрибута "тип")

<block type="page/html_header" name="happy.label" as="happyLabel" template="page/html/happyLabel.phtml"/>

Вот соответствующий код xml-макета из design/frontend/default/{$mytheme}/layout/page.xml:

<default translate="label" module="page">
    <label>All Pages</label>
    <block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">
        <!--------------->
        <block type="page/html_header" name="header" as="header">
            <block type="page/html_header" name="happy.label" as="happyLabel" template="page/html/happyLabel.phtml"/>
            <block type="page/template_links" name="top.links" as="topLinks"/>
            <block type="page/switch" name="store_language" as="store_language" template="page/switch/languages.phtml"/>
            <block type="core/text_list" name="top.menu" as="topMenu" translate="label">
                <label>Navigation Bar</label>
                <block type="page/html_topmenu" name="catalog.topnav" template="page/html/topmenu.phtml"/>
            </block>
            <block type="page/html_wrapper" name="top.container" as="topContainer" translate="label">
                <label>Page Header</label>
                <action method="setElementClass"><value>top-container</value></action>
            </block>
            <block type="page/html_welcome" name="welcome" as="welcome"/>
        </block>
        <!--------------->
    </block>
</default>

Файл шаблона содержит всего пять элементов списка в формате UL и Li.

РЕДАКТИРОВАТЬ:

  • Как мне выбрать, какое значение передать атрибуту "тип" при создании блокировать?
Author: Mr_Green, 2013-10-08

1 answers

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

Причина, по которой использование "page/html_header" работает, заключается в том, что это дочерний класс базового блока шаблонов magento Mage_Core_Block_Template

class Mage_Page_Block_Html_Header extends Mage_Core_Block_Template

Поскольку ваш файл шаблона не вызывает методы, не входящие в класс Mage_Page_Block_Html_Header (или его родителей), он будет отображаться нормально, так как в конечном итоге вы имеете дело с базой класс ядра/шаблона, который имеет все необходимые базовые методы, позволяющие загружать и отображать шаблон (например, защищенная функция _toHtml())

Вы могли бы с таким же успехом (и должны были) использовать "ядро/шаблон" в качестве своего типа, так как ваш шаблон не требовал никаких специальных функций для визуализации.

Допустим, например, в вашем файле шаблона был вызов метода для определения ответа на жизнь, вселенную и все остальное:

<?php echo $this->whatIsTheAnswer() ?>

Тогда ваш рендеринг шаблона будет иметь провалившийся. $это тип, определенный в определении блока, таким образом Mage_Page_Block_Html_Header в вашем случае/примере.

Таким образом, тип = класс, содержащий ваши методы, вызываемые из файла шаблона. ($это в шаблоне) Если у вас нет пользовательских вызовов/методов в файле шаблона, то ядра/шаблона будет достаточно. Если вам нужны пользовательские методы, то вам нужно создать этот блок в своем пользовательском модуле и использовать его в качестве типа, но ваш пользовательский блок в конечном итоге должен привести к "Mage_Core_Block_Template" через наследование.

Я надеюсь, что это поможет вам понять это немного лучше, если нет, спросите, и я постараюсь объяснить больше.

 7
Author: ProxiBlue, 2013-10-08 15:49:50