如何在布局XML中为我的Magento控制器定义块?

时间:2011-12-02 08:01:21

标签: php magento magento-1.4

我有控制器,它有以下代码:

class Company_ModuleName_NameController extends Mage_Core_Controller_Front_Action
{

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

然后我在config.xml中配置了布局XML。现在我想添加指向.phtml文件的块,当用户访问我的控制器时,该.phtml文件将显示给用户。

1 个答案:

答案 0 :(得分:3)

首先,您应该为控制器定义布局句柄:

像这样:

<modulename_name_index>

</modulename_name_index>

您应该定义要显示的位置:内容,左,右,另一个块:

<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是块的名称。在示例文件中应该是这样的:

公司/模块名/砌块/ Blockname.php。 你的config.xml也应该正确定义,所以magento明白,对于'module'的东西,它应该特别加载你的类。 像这样:

<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()

这不起作用。另一方面,如果您的phtml中有非​​常简单的php,如下所示,则不需要自定义块。

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