Создайте новый блок в Magento

Я задал этот вопрос вчера. Статический блок на домашней странице в 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 .