Как я могу определить блок для моего контроллера Magento в макете XML? - PullRequest
1 голос
/ 02 декабря 2011

У меня есть контроллер, и он имеет следующий код:

class Company_ModuleName_NameController extends Mage_Core_Controller_Front_Action
{

    public function indexAction()
    {
        $this->loadLayout();     
        $this->renderLayout();
    }
}

Затем я настроил макет XML в моем config.xml.Теперь я хотел бы добавить блок, который указывает на файл .phtml, и когда пользователь получит доступ к моему контроллеру, этот файл .phtml будет показан пользователю.

1 Ответ

3 голосов
/ 02 декабря 2011

Прежде всего вы должны определить дескриптор макета для вашего контроллера:

Примерно так:

<modulename_name_index>

</modulename_name_index>

Вы должны определить, где вы хотите отобразить: контент, слева, справа, другоеblock:

<modulename_name_index>
    <reference name="content">
    </reference name="content">
</modulename_name_index>

И затем вы определяете блок, который будет отображаться:

<modulename_name_index>
    <reference name="content">
        <block type="module/blockname" name="blockname" template="templatedir/templatefile.phtml"/>
    </reference name="content">
</modulename_name_index>

Где module / blockname - это имя вашего блока.В примере файл должен выглядеть следующим образом:

Company / ModuleName / Block / Blockname.php.Ваш config.xml также должен быть определен правильно, чтобы magento понимал, что с модулем он должен загружать именно ваш класс.Примерно так:

<global>
    ...
    <blocks>
        <module>
            <class>Company_Module_Block</class>
        </module>
    </blocks>
    ...
</global>

ОБНОВЛЕНИЕ 1

Если вы хотите просто визуализировать некоторый контент, вы можете использовать класс блоков Magento по умолчанию:

core/template or Mage/Core/Block/Template

Вот так будет выглядеть ваш xml-файл:

<modulename_name_index>
    <reference name="content">
        <block type="core/template" name="blockname" template="templatedir/templatefile.phtml"/>
    </reference name="content">
</modulename_name_index>

НО, если у вас есть в .phtml-файле что-то вроде:

$this->getSomethingSpecificValueForCurrentDisplay()

Это не сработает.С другой стороны, если у вас очень простой php в вашем phtml, как показано ниже, вам не нужен ваш пользовательский блок.

<?php for(i = 0; i++; i< 10){ ?>
     <?php echo "Hello mates" ?>
<?php } ?>
...