Создать новый блок в Magento - PullRequest
1 голос
/ 07 декабря 2010

Я задал этот вопрос вчера Статический блок на домашней странице в Magento , который ответил на мой вопрос о подключении блока cms / к существующему блоку (контент, в этом примере).

Но теперь я хотел бы знать, как создать свой собственный блок.

У меня есть это в моем .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>

Но это не работает.

Я также попытался создать свой собственный тип блока (путем копирования объявления хлебных крошек) в файле 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"?

1 Ответ

5 голосов
/ 07 декабря 2010

Существует множество различных блоков, которые вы можете использовать, не создавая свои собственные. В этом случае я думаю, что 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 есть множество прекрасных статей, в том числе Theming & Design .

...