Magento 配置文件未加载布局

Magento config file not loading layout

我是 Magento 1.9 的新手,无法让我的 config.xml 文件加载我的 url 布局文件:"localhost/index.php/moduleone/index/index"。有人可以帮我弄清楚我错过了什么吗?

/app/code/local/Test/ModuleOne/etc/config.xml:

<config>
    <modules>
        <Test_ModuleOne>
            <version>0.1.0</version>
        </Test_ModuleOne>
    </modules>
    <frontend>
        <routers>
            ...
        </routers>
        <layout>
            <updates>
                <moduleone>
                    <file>moduleone.xml</file> <!-- Our layout file name-->
                </moduleone>
            </updates>
        </layout>
    </frontend>
    <global>
        ...
    </global>
</config>

/app/design/frontend/default/layout/moduleone.xml:

<?xml version="1.0"?>
    <layout version="0.1.0">
    <moduleone_index_index>
        <reference name="content">
            <block type="moduleone/moduleone" name="moduleone" template="moduleone/moduleone.phtml" />
        </reference>
    </moduleone_index_index>
</layout>

事实证明,我有很多项目阻止 Magneto 渲染布局。这是获取模板和块呈现的方法:

  1. 在config.xml:

    • "Router Name" 必须 a) 匹配布局标签的 "Router Name" 组件,"layout/mymodule.xml" 中的 <mymodule_index_index> 和 b) 是唯一的(即 - 可以't be used in another module).

    • <mymoduleurl> 标签需要匹配 "URL Name"(即 <frontName> 标签内的内容)。

    • <moduleoneblockname> 是一个 "Block Name" 需要定义,以便在布局文件的 <block> 标签内使用 "type" 属性。与 "Route Name" 一样,"Block Name" 需要是唯一的。

/app/code/local/Test/ModuleOne/etc/config.xml:

<config>
    <modules>
        <Test_ModuleOne>
            <version>0.1.0</version>
        </Test_ModuleOne>
    </modules>
    <frontend>
        <routers>
            <mymodulerouter> <!-- Router Name -->
                <use>standard</use>
                <args>
                    <module>Test_ModuleOne</module> 
                    <frontName>mymoduleurl</frontName> <!-- Url Name -->
                </args>
            </mymodulerouter>
        </routers>
        <layout>
            <updates>
                <mymoduleurl> <!-- needs to match frontName tag -->
                    <file>modulelayoutfile.xml</file>
                </mymoduleurl>
            </updates>
        </layout>
    </frontend>
    <global>
        <blocks>
            <!-- new block definition -->
            <moduleoneblockname> <!-- Block Name -->
                <class>Test_ModuleOne_Block</class>
            </moduleoneblockname>
        </blocks>
    </global>
</config>
  1. 模块文件 -

/app/etc/modules/Test_ModuleOne.xml 文件:

<config>
    <modules>
        <Test_ModuleOne>
            <active>true</active>
            <codePool>local</codePool>
        </Test_ModuleOne>       
    </modules>
</config>
  1. 控制器 -

/app/code/local/Test/ModuleOne/controllers/IndexController.php:

<?php
    class Test_ModuleOne_IndexController extends Mage_Core_Controller_Front_Action{
        public function indexAction(){
            $this->loadLayout(); // loads the default layout file, page.xml
            $this->renderLayout(); // renders the default layout file, page.xml
        }
    }
  1. 布局文件(注意:存储在/app/design/frontend/base路径下的文件在升级Magento时会被覆盖!)

      <mymodulerouter_index_index> 标签的
    • "Router Name" 组件应与 config.xml 文件中指定的 "Router Name" 匹配。
    • "type" 属性遵循以下格式:type="block name"/"block class"。 "Block name" 被定义为 config.xml 中的标签(在 <blocks> 标签内),而 "block class" 被定义在 class php 文件中 "Block"目录。在此示例中,"Block Name" 在 config.xml 中的 <moduleoneblockname> 标记中定义,"Block Class" 在文件中定义,"Block/myblockclass.php"(参见第 5 项)

/app/design/frontend/base/默认/布局/modulelayoutfile.xml:

<layout version="0.1.0">
    <mymodulerouter_index_index> <!-- Format of tag is: (Router Name)_(controller name)_(controller action)-->
        <reference name="content">
            <block type="moduleoneblockname/myblockclass" name="right" template="mytemplate/mytemplate.phtml"/>
        </reference>
    </mymodulerouter_index_index>
</layout>
  1. 块class文件
    • class 名称 "Test_ModuleOne_Block_myblockclass" 的 "myblockclass" 部分必须用作文件名。

/app/code/local/Test/ModuleOne/Block/myblockclass.php:

<?php
class Test_ModuleOne_Block_myblockclass extends Mage_Core_Block_Template
{
    public function myfunction()
    {
        return "<br>Loaded myblockclass.php class";
    }
}
  1. 模板文件:(注意:存储在/app/design/frontend/base路径中的文件将在升级Magento时被覆盖!)

/app/design/frontend/base/default/template/mytemplate/mytemplate.phtml

<?php
    echo "In mytemplate.phtml";
    echo $this->myfunction();
?>

通常路由不会在你放置时触发

                <module>
                  Packt_Helloworld
                </module>
                <frontName>
                  helloworld
                </frontName>

你应该内联,否则路由将无法正常工作:

                <module>Packt_Helloworld</module>
                <frontName>helloworld</frontName>

也许这对某人有帮助