【问题标题】:Debugging layout xml file - file not loaded into system调试布局 xml 文件 - 文件未加载到系统中
【发布时间】:2012-07-18 19:53:59
【问题描述】:

我无法将我的布局 xml 文件加载到系统中。我需要在 adminhtml 中为我正在构建的模块加载它,所以这里是重要的配置部分:

<adminhtml>
<layout>
    <updates>
        <coupsmart_coupon>
            <file>coupsmart_coupon.xml</file>
        </coupsmart_coupon>
    </updates>
</layout>
</adminhtml>

现在,名为 coupsmart_coupon.xml 的实际布局文件如下:

<layout>
    <coupsmart_coupon_adminhtml_coup_index>
        <update handle="coupsmart_coupon"/>
        <reference name="content">
            <block type="coupsmart_coupon/adminhtml_forms" name="myform"/>
        </reference>
    </coupsmart_coupon_adminhtml_coup_index>
</layout>

现在,为了调试它,我在布局 xml 文件中添加了一个错误,例如省略了右括号 (>),我没有遇到任何异常。因此,我在控制器中使用$this-&gt;getLayout()-&gt;getUpdate()-&gt;getHandles() 检查了句柄,然后将coupsmart_coupon_adminhtml_coup_index 作为句柄之一返回,这正是我在布局xml 文件中命名的句柄。否则为什么不会加载?

注意:我已清除缓存并再次尝试。还是行不通。我也有登录和异常,所以我的日志中应该显示异常。如果需要任何其他代码,请告诉我。

【问题讨论】:

    标签: xml magento


    【解决方案1】:

    想通了,因为adminhtml.xml 没有添加到 DOM,而且 xml 文件实际上位于 etc/adminhtml.xml 而不是 config.xml。当我将布局更新移动到配置时,它看起来如下:

    <config>
        <adminhtml>
            <layout>
                <updates>
                    <coupsmart_coupon>
                        <file>coupsmart_coupon.xml</file>
                    </coupsmart_coupon>
                </updates>
            </layout>
        </adminhtml>
    </config>
    

    现在它可以工作了。感谢大家的帮助。

    【讨论】:

      【解决方案2】:

      你的 config.xml 是:&lt;config&gt;&lt;adminhtml&gt;...&lt;/adminhtml&gt;&lt;/config&gt; 对吧?

      我们在谈论 Magento 1.7?您是否尝试将您的 layout.xml 放入

      design/frontend/base/default/layout?

      你确定你的 config.xml 被读取了吗?

      我知道,不好的问题,但是:您是否真的清除了正确 magento 实例的缓存? :-)

      config.xml 看起来是正确的,所以我认为是之前的错误。

      希望对您有所帮助。

      【讨论】:

      • 是的,我将 adminhtml 包装在配置中(否则任何模块都不起作用)。是的,我将它的副本放在所有布局文件中(没有结果)。必须读取配置 xml,因为我在 adminhtml 中有一个菜单项。最后一部分:我想我清除了正确的缓存。我在系统->缓存管理中刷新了 Magento 缓存;对吗?
      • 应该是正确的,有时 magento 是邪恶的,并且在“清除”未使用的缓存时遇到问题,例如如果您更改数据库表,因为 Zend_Db 缓存了表 chemas。您是否查看了 var/log 中的 exception.log?如果异常被捕获,它会被记录在那里并且不显示。我经常遇到诸如“名称为...的未知块”之类的异常
      • Grrr,在我的例外中什么都没有。我一直在看那些。这让我很困惑。我最近确实更改了资源模型,但这不应该影响它吗?...
      • 好的,睡觉前的最后一个 tpp:die() 进入课程之前的块(是否包含块文件),然后 die() 进入 __construct。您应该考虑安装:github.com/ikonoshirt/Wee_Developertoolbar 它会向您显示已加载的布局句柄。如果您在案例中有错误,这是一个问题。并记录加载的块和 layout.xml 文件:fontis.com.au/blog/magento/… 如果这没有帮助,我不知道 atm。祝你好运!
      • 很棒的工具!这非常有帮助。我试图弄清楚你在上课前将 die() 放入块中是什么意思;我很确定甚至没有加载任何块,因为未加载布局 xml。可以的话,能详细点吗?哪个块,哪个 __construct()?
      【解决方案3】:

      仅供参考,该文件应该可能在 app/design/default/layout/ 中,请确认或告知是否有自定义 adminhtml 设计包。

      另外,你可能需要在 index.php 中调用 Mage::setIsDeveloperMode(true),可以通过添加来完成

      SetEnv MAGE_IS_DEVELOPER_MODE
      

      到您的 .htaccess 文件(请参阅 index.php 以了解此内容)。破坏你的布局 XML,刷新缓存后端,你应该会看到一个错误。

      【讨论】:

      • 也许我使用的是不同的版本,但我有不同的前端和 adminhtml 文件夹;我将布局 xml 放在所有可用的布局文件夹中,只是为了确保它在那里(有 3 个)。我已经开启了开发者模式。已经刷新缓存但没有结果。
      • Adminhtml 布局 xml 文件将沿着路径 app/design/adminhtml/PACKAGE/THEME/layout/。通常,PACKAGE =“默认”。您可以在$updateFiles foreach loop 中记录/调试Mage_Core_Model_Layout_Update::getFileLayoutUpdatesXml() 中的文件
      • 问题是没有调试文件;问题是布局 xml 甚至不存在。当我调用 getFileLayoutUpdatesXml() 时,布局 xml 中的块不在其中。该文件只是没有被加载到系统中。你知道什么可能导致文件存在但被忽略吗?如果它在布局文件夹中,即使没有加载句柄,它也不应该存在于布局更新xml中吗?
      • 明确地说,我的getFileLayoutUpdatesXml() 日志记录建议是为了让您查看您的文件是否在列表中。如果它不在使用is_readable() 调用检查的文件列表中,则存在配置问题。如果是这种情况,并且如果开发模式确实启用,那么破坏模块的 config.xml 应该会引发解析错误。如果没有,你有一个模块声明文件错误或缓存问题。
      • 解决了。出于某种原因,尽管其他一切正常,但我的 &lt;layout&gt;&lt;update&gt;&lt;module&gt;&lt;file&gt; 在 etc/adminhtml.xml 中不起作用;当我把它放在 etc/config.xml 中时,就像在 ` 中一样,它起作用了。考虑到我的 adminhtml.xml 文件中的所有其他内容,我不知道为什么一个工作而另一个没有工作。
      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 2016-04-21
      • 2019-08-26
      • 2022-08-04
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      相关资源
      最近更新 更多