3

我正在同时开发一个 Magento 自定义模块和一个 Magento 自定义主题,但我遇到了一些让我发疯的问题!!!(PS:Magento 1.7.0.2)

我的模块和主题结构如下:

app
  -local
    -MyNameSpace
       -MyPackageName
          -Block
          -controllers
          -etc
          -Helper
          -Model
          -sql

design
  -frontend
    -default
       -myCustomTheme
         -etc
         -layout
         -template

我的 config.xml(放在 MyPackageName/etc 上):

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Namespace_PackageName>
            <version>0.1.0</version>
        </Namespace_PackageName>
    </modules>

    <frontend>
        <routers>
            <Namespace_PackageName>
                <use>standard</use>
                <args>
                    <module>Namespace_PackageName</module>
                    <frontName>packagename</frontName>
                </args>
            </Namespace_PackageName>
        </routers>
        <layout>
            <updates>
                <namespace_packagename>
                    <file>myCustomTheme/layout/local.xml</file>
                </namespace_packagename>
            </updates>
        </layout>
    </frontend>

    <global>
        <blocks>
            <namespace_packagename>
                <class>Namespace_PackageName_Block</class>
            </namespace_packagename>
        </blocks>
    </global>
</config>

我想在我的自定义模块页面上应用我的一些自定义主题皮肤。即:使用我的控制器,我们称它为ExampleController,和exampleAction() 动作方法... 这个页面布局的变化,应该用local.xml 中的标签包裹,对吧?这是行不通的!

关键是,访问 URL“mysite.com/packagename/example/example”并使用 layoutViewer 模块查看句柄,我可以在那里看到 packagename_example_example 作为句柄,但我无法自定义它,因为它不是在 local.xml 中被识别!Magento 快把我逼疯了,有人知道我在做什么错吗?

提前非常感谢:)

编辑

当我将自定义模板和 local.xml 文件放在基目录中时,它工作正常!!我得到这样的东西:

  • 基本文件夹中的自定义模板,自定义主题文件夹中的 local.xml - 不工作
  • 自定义主题文件夹中的自定义模板,自定义主题文件夹中的 local.xml - 不工作
  • 基本文件夹中的自定义模板,基本文件夹中的 local.xml -工作正常!
  • 自定义主题文件夹中的自定义模板,基本文件夹中的 local.xml - 不工作

有人知道这可能是什么原因吗?Magento 无法识别我的自定义文件夹,只有当我将它们放在 Magento Core 所在的基本目录中时。

4

2 回答 2

8

您在这里混淆了一些概念。

首先,Magento 将始终查找以local.xml当前配置的主题层次结构命名的文件。

design/frontend/default/[CURRENT THEME]/layout/local.xml
design/frontend/default/default/layout/local.xml
design/frontend/base/myCustomTheme/layout/local.xml

这适用于无模块布局自定义。所以不要命名你的文件local.xml,它只会使事情变得混乱。

其次,当您为 a 中的模块指定自定义布局 XML 文件时config.xml,路径应该来自布局文件夹的基础

<!-- BAD -->
<file>myCustomTheme/layout/local.xml</file>

<!-- GOOD -->
<file>my-customer-file.xml</file>

您可以通过在您的 Magento 版本中找到以下行来获取 Magento 正在使用的所有 XML 文件的路径列表

#File: app/code/core/Mage/Core/Model/Layout/Update.php
$fileStr = file_get_contents($filename);

并添加一些调试代码

var_dump($filename);
$fileStr = file_get_contents($filename);

最后,根据您的更新,听起来您并没有设置 Magento 来使用您的自定义主题。确保主题名称设置为

System -> Configuration -> Design -> Themes
于 2013-05-16T17:41:15.493 回答
1

不知道我是否明白你的意思:你创建了一个带有一些输出页面的模块,并且在这个页面上你有选择地想要应用一个与你在你的网站上使用的主题不同的主题?你为什么不把你的更改放在你的local.xml主题文件中?然后所有代码

...
<layout>
  <updates>
     <namespace_packagename>
       <file>myCustomTheme/layout/local.xml</file>
     </namespace_packagename>
   </updates>
</layout>
...

应该是不必要的,因为local.xml无论如何都会覆盖所有布局。还是我在您的问题中遗漏了什么?

于 2013-05-14T22:00:01.420 回答