【问题标题】:Magento Layout xml in custom module not working自定义模块中的 Magento Layout xml 不起作用
【发布时间】:2013-06-17 18:54:37
【问题描述】:

您好 Magento 专业人士。

我正在为 magento 编写一个自定义模块,但在这里遇到了一些问题。 我的布局 xml 不起作用。 首先 - 禁用缓存,禁用编译,启用 magento 开发人员模式并启用日志记录。 一切似乎都配置正确,但我什至没有收到异常或日志。

我的模块 config.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <Namespace_Module>
            <version>1.1.0</version>
            <depends>
                <Mage_Catalog />
            </depends>
        </Namespace_Module>
    </modules>
    <global>
        <helpers>
            <module>
                <class>Namespace_Module_Helper</class>
            </module>
        </helpers>
        <models>
            ...
        </models>
        <blocks>
            ...
        </blocks>
    </global>
    <frontend>              
        <routers>           
            <module>
                <use>standard</use>
                <args>
                    <module>Namespace_Module</module>
                    <frontName>module</frontName>       
                </args>
            </module>
        </routers>              
        <layout>
            <updates>
                <module>
                    <file>
                        module/module.xml
                    </file>
                </module>
            </updates>
        </layout>                               
    </frontend>
    <admin>
        <routers>
            <adminhtml>
                ...
            </adminhtml>
        </routers>
    </admin>
    <adminhtml>
        <layout>
            <updates>
                <module>
                    <file>module.xml</file>
                </module>
            </updates>
        </layout>
    </adminhtml>        
</config>

我只是将“命名空间”和“模块”设置为我的自定义命名空间和自定义模块名称的占位符。

在前端的 xml 布局中,我只是放入了一些错误配置,以查看它是否会导致错误,但 xml 文件甚至无法解析。例如我输入&lt;layout&gt; &lt;/xxxlayout&gt;

配置有什么问题?

布局xml文件放在base/default/layout/module/module.xml下

我在同一个文件中配置的管理布局完美运行!

【问题讨论】:

    标签: xml magento layout configuration


    【解决方案1】:

    可能有很多问题(有些无法调试,因为您在此处发布之前更改了 config.xml 文件),但会立即弹出的一件事是这个

    <file>
        module/module.xml
    </file>
    

    应该是这样的

    <file>module/module.xml</file>
    

    由于各种复杂的原因,Magento 和 PHP 解析 XML 文档时,文本节点中的空白很重要。这意味着当布局更新 XML 解析代码到达这里时

    #File: app/code/core/Mage/Core/Model/Layout/Update.php
    public function getFileLayoutUpdatesXml(
        //...
        foreach ($updateFiles as $file) {
            $filename = $design->getLayoutFilename($file, array(
                '_area'    => $area,
                '_package' => $package,
                '_theme'   => $theme
            ));
            if (!is_readable($filename)) {
                continue;
            }
    

    它为您的代码生成的$filename 字符串看起来像

    string '/path/to/mage/app/design/frontend/base/default/layout/
                        module/module.xml
                        ' (length=...)
    

    也就是说,中间有一大块旧的空白。此路径不会通过is_readable 检查,因此您的布局文件将被跳过。

    从您的节点中删除空白区域,您将解决一个潜在问题。

    【讨论】:

    • 嘿艾伦,非常感谢你,这正是问题所在。我已经用了 3 个小时了,你是我的英雄 :)
    • 在我看来这是一个应该修复的错误......因为我写的是格式良好的 xml。打算举报。
    • 这个问题有什么进展吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 2019-10-01
    • 2010-11-09
    • 1970-01-01
    相关资源
    最近更新 更多