Magento布局 - 未呈现/显示内容

时间:2011-08-13 03:19:54

标签: xml layout magento configuration

我已经阅读了各种Magento教程以及Magento的布局书,但我遇到了以下问题。

我创建了一个自定义模块,位于app / code / local / Company / Module /中。我创建了一个位于Company / Module / Block / Ablock.php中的块Company_Module_Block_Ablock。我在Company / Module / etc / config.xml

中定义了<config> ... <frontend><layout><updates><module><file>module.xml

config.xml也有

<global>
   <blocks>
      <module>
         <class>Company_Module_Block</class>
      </module>
   </blocks>
</global>

在这个module.xml中我有:

<layout>
    <company_module_index_index>
        <reference name="content">
            <block type="module/ablock" name="myablock" template="module/ablock.phtml" />
        </reference>
    </company_module_index_index>
</layout>

我创建了一个Company / Module / controllers / IndexController.php并在那里定义了一个indexAction

$this->loadLayout();
$this->renderLayout();

但无论我尝试什么,我都无法显示我的ablock.phtml。 ablock.phtml位于app / design / frontend / company / default / template / module / ablock.phtml中。该主题已启用,通常在该网站上工作。

我甚至尝试在布局中更改module.xml,因此它甚至不使用模板,甚至不显示任何内容。像这样 -

<reference name="content">
<block type="core/text">
    <action method="setText">
        <text>Testing</text>
    </action>
</block>
</reference>

顺便说一下,自定义主题工作正常,其他页面的内容会在正确的位置显示。

我在.htaccess中有SetEnv MAGE IS DEVELOPER MODE 1,它可以帮助显示警告和事情。但是我的systems.log和exceptions.log中没有错误。 (是开启了日志记录)

任何人都有任何关于如何解决这个问题的建议,或者可以发现配置或代码中的错误?

我的下一个选项似乎是破解核心模块代码并记录我的module.xml被加载和解析的位置以查看那里发生了什么。

感谢。

4 个答案:

答案 0 :(得分:31)

调试布局更新XML问题的步骤:

  1. 您的XML文件(local.xmlmodule.xml)是否已加载到系统中

  2. 您在布局文件中使用的句柄标记是否与为您的请求生成的句柄匹配?

  3. 调试步骤1的最快方法是,在显示错误的开发人员模式下,故意向Layout Update XML文件中引入一个格式错误的错误。

    <layout <!-- notice missing closing taglayout -->
        <company_module_index_index>
            <reference name="content">
                <block type="module/ablock" name="myablock" template="module/ablock.phtml" />
            </reference>
        </company_module_index_index>
    </layout>
    

    如果开发者模式已开启并且您已清除缓存,则加载任何具有上述内容的页面都会导致错误。这让您知道Magento正在尝试加载您的XML文件。如果页面加载没有问题,这意味着您将XML文件放在错误的位置,或者您在config.xml中错误配置了XML。

    接下来是你检查你的布局句柄。你要确保你使用正确的。您可以通过在loadLayoutrenderLayout请求之后调用以下来查看用于特定请求的布局句柄

    //from a controller action
    $this->loadLayout();
    $this->renderLayout();
    var_dump(Mage::getSingleton('core/layout')->getUpdate()->getHandles());
    exit("bailing early at ".__LINE__." in ".__FILE__);
    

    我发现以上项目通常会处理90%的布局问题。一定要经历几次这个过程,因为它很容易错过一步,并且当它不是时就会假设一切正常。我常常冒这样做的风险,我创建Commerce Bug(商业调试扩展)的部分原因是为了快速提供这些信息,并一目了然地帮助调试问题。

    根据您在下面的评论,问题似乎是您正在使用的布局句柄。系统生成的句柄是

    module_module_test
    

    但是,您在layout.xml中定义的句柄是

    company_module_index_index
    

    这是“完整操作名称”句柄。典型的语法是

    frontname_controllername_actionname
    

    将手柄更改为module_module_test,您应该设置。

答案 1 :(得分:1)

  • 您是否禁用或更新了Magento缓存?
  • 是否启用了您的模块?它是否列在系统,配置,高级,高级?
  • 您的Block会延伸哪个类?

关心,亚历山德罗

答案 2 :(得分:0)

我看不到你所有的config.xml,你可能会错过这样一个部分:

<frontend>
    <routers>
        <company_module>
            <args>
                <frontName>module</frontName>
                <module>Company_Module</module>
            </args>
            <use>standard</use>
        </company_module>
    </routers>
</frontend>

然后,要到达indexAction或您的indexController,您需要地址www.example.com/module。这意味着在加载布局时会使用布局句柄company_module_index_index。顺便说一句,发布的布局XML被破坏,结束标记与开始标记不匹配。

答案 3 :(得分:0)

在magento 2.3.2中,您必须输入此代码以获取布局句柄

echo $this->getRequest()->getFullActionName();

所以控制器执行这样的功能

    public function execute()
    {

        echo $this->getRequest()->getFullActionName();exit;
    }

并检查屏幕上打印的值是否与布局句柄名称相同