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


How can I define block for my Magento controller in layout XML?

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

class Company_ModuleName_NameController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {
        $this->loadLayout();     
        $this->renderLayout();
    }
}

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

首先你应该为你的控制器定义布局句柄:

:

<modulename_name_index>
</modulename_name_index>

你应该定义你想要显示的位置:content, left, right, another 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是你的块的名称。在示例文件中应该像这样:

公司/ModuleName/块/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>

但是如果你的。php文件中有如下内容:

$this->getSomethingSpecificValueForCurrentDisplay()

这行不通。另一方面,如果你的php中有非常简单的php,像下面这样,你不需要自定义块。

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