Я задал этот вопрос вчера. Статический блок на домашней странице в Magento , который ответил на мой вопрос о подключении cms / block к существующему блоку (содержимое в этом примере).
Но теперь я хотел бы знать, как создать свой собственный блок.
У меня это в моем .phtml-шаблоне:
<?php echo $this->getChildHtml('home_flash') ?>
И это в моем файле cms.xml
<reference name="home_flash"> <block type="cms/block" name="home-page-flash" before="content"> <action method="setBlockId"><block_id>home-page-flash</block_id></action> </block> </reference>
Но это не работает.
Я также попытался создать свой собственный тип блока (путем копирования объявления breadcrumbs) в файле page.xml:
<block type="page/html_home_block" name="home_block" as="home_block" template="page/template/home_block.phtml"/>
Этот файл существует, но не отображается.
Однако, когда я ссылаюсь на блок следующим образом:
<block type="page/html_breadcrumbs" name="home_block" as="home_block" template="page/template/home_block.phtml"/>
Он отображает мой шаблон домашнего блока, но исходный cms / block не привязан к нему.
Надеюсь, что все разные случаи показывают, что происходит, и выделите пробел в моих знаниях достаточно хорошо, чтобы кто-то мог ответить, нужно ли мне «регистрировать» мой новый тип «home_block» где-то?
Существует множество различных блоков, которые вы можете использовать, не создавая свои собственные. В этом случае я думаю, что core/text_list
будет подходящим, потому что он не требует шаблона и может содержать столько дочерних блоков, сколько вам нужно.
<?xml version="1.0"?> <layout version="0.1.0"><!-- All layout files start with this --> <cms_index_index><!-- Index directive is the same as "home" page --> <reference name="root"><!-- For more blocks that can be referenced see "default" directive --> <block type="core/text_list" name="home_flash"> <block type="cms/block" name="home-page-flash"> <action method="setBlockId"><block_id>home-page-flash</block_id></action> </block> </block> </reference> </cms_index_index> <!-- More directives might go here --> </layout>
Другими полезными типами блоков, которые стоит знать, являются core/text
и core/template
которые соответствуют Mage_Core_Block_Text
и Mage_Core_Block_Template
соответственно. Они привыкли больше всего.
У вашего домашнего блочного типа page/html_home_block
не было никакого PHP-класса с соответствующим именем, и если бы вы действительно создали свой собственный, вы бы не смогли использовать префикс page
поскольку Magento уже делает.
Для создания блока вам нужен только <block>
в файле макета.
Чтобы создать тип блока, вам нужно написать класс PHP, дать ему пространство имен и объявить его частью модуля.
Добавление к существующему блоку – это время, когда вы используете <reference>
.
В Magento Knowledge Base есть много прекрасных статей, в том числе некоторые из Theming & Design .