自定义模块的自定义布局不会在 Magento 1.9 中加载

Posted

技术标签:

【中文标题】自定义模块的自定义布局不会在 Magento 1.9 中加载【英文标题】:Custom Layout for Custom Module wont Load In Magento 1.9 【发布时间】:2017-12-04 09:52:59 【问题描述】:

我在 Magento 中制作了一个自定义模块。我现在正试图让它加载自定义布局/模板。我确信这是我想念的简单的东西。请看看我的代码,告诉我我做错了什么。

我的包叫“Ben”,我的模块叫“Distribution”

首先在“App/etc/modules”中,我让 magento 知道我的模块 "Ben_Distribution.xml"

<?xml version="1.0"?>
 <config>
    <modules>
        <Ben_Distribution>
            <active>true</active>
            <codePool>local</codePool>
        </Ben_Distribution>
    </modules>    
</config>

然后在“app/code/local/Ben/Distribution/controllers”我把我的控制器“IndexController.php

<?php
class Ben_Distribution_IndexController extends Mage_Core_Controller_Front_Action

    public function indexAction()
    
        //echo 'Hello World';
        $this->loadLayout();    
        $this->renderLayout();
    

?>

然后在“App/code/local/Ben/Distribution/etc”我把我的配置文件“config.xml”

<config>
    <modules>
        <Ben_Distribution>
            <version>0.1.0</version>
        </Ben_Distribution>
    </modules>   

    <frontend>
        <routers>
            <distribution>
                <use>standard</use>
                <args>
                    <module>Ben_Distribution</module>
                    <frontName>distribution</frontName>
                </args>
            </distribution>
        </routers>
        <layout>
            <updates>
                <distribution>
                    <file>distribution.xml</file>
                </distribution>
            </updates>
        </layout>                   
    </frontend>    
</config>

然后在“App/Design/Frontend/Packagename/themename/template/ben/”中放入包含一些 html 的“distribution.phtml”来显示

最后我尝试制作 layout.xml 文件,所以在“App/Design/Frontend/Packagename/themename/layout/ben/”中我放了“distribution.xml”

<?xml version="1.0"?>
<layout version="0.1.0">
    <distribution_index_index>
        <reference name="content">
            <block type="core/template" name="distribution" template="distribution.phtml"/>
        </reference>
    </distribution_index_index>
</layout>

最终结果是我的页面按预期加载到 www.url.co.uk/distribution/。当我在控制器中使用 echo 语句时,它加载正常(带有“Hello World”的空白页面。但是当我切换到加载/渲染布局时,我得到了默认的网站布局,而我的 .phtml 文件中的内容没有。所以我的 layout.xml 没有被加载。

谢谢

附加信息 我在控制器中使用此代码加载了我的 .phtml 模板,但是由于这加载了标准的“3 列”页面布局,并且我需要 1 列布局,因此我尝试使用 layout.xml 文件来代替。

<?php 
class Ben_Distribution_IndexController extends Mage_Core_Controller_Front_Action

    public function indexAction()
    
        //Get current layout state
        $this->loadLayout();   

        $block = $this->getLayout()->createBlock(
            'Mage_Core_Block_Template',
            'ben.distribution',
            array(
                'template' => 'ben/distribution.phtml'
            )
        );

        $this->getLayout()->getBlock('content')->append($block);

        $this->_initLayoutMessages('core/session');

        $this->renderLayout();
    

?>

【问题讨论】:

【参考方案1】:

我发现了自己的简单错误。很抱歉浪费您的时间。

<block type="core/template" name="distribution" template="distribution.phtml"/>

应该是

<block type="core/template" name="distribution" template="ben/distribution.phtml"/>

【讨论】:

以上是关于自定义模块的自定义布局不会在 Magento 1.9 中加载的主要内容,如果未能解决你的问题,请参考以下文章

从 magento 的自定义模块中添加 sales_flat_order_item 表中的新字段

history.phtml 上 Magento 中的自定义状态

Magento:自定义模块错误(在 Layout.php 中找不到类)

Magento - 自定义选项不会更新可配置产品的价格

自定义模块中的 Magento Layout xml 不起作用

在 Magento 中为模块创建数据库函数