что должно быть в атрибуте типа блока
Я думаю, что я в замешательстве, потому что, продвинувшись так далеко в изучении 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.
РЕДАКТИРОВАТЬ:
- Как мне выбрать, какое значение передать атрибуту "тип" при создании блокировать?
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" через наследование.
Я надеюсь, что это поможет вам понять это немного лучше, если нет, спросите, и я постараюсь объяснить больше.