为什么我的自定义Magento模块覆盖整个核心模块并且没有产生任何结果?

时间:2011-07-07 15:29:12

标签: magento

我一直在研究我的第一个Magento模块,该模块旨在扩展Mage_Page_Block_Html_Head类并更改getDefaultTitle()的功能。简单吧?

我在我的模块目录local / Company / Metadata / Block目录中创建一个名为Title.php的新文件,而在Title.php中则是以下代码:

<?php
class Company_Metadata_Block_Title extends Mage_Page_Block_Html_Head
{

}

我甚至没有开始调整getDefaultTitle()的功能,我似乎已经错过了这条船。

当我上传新模块时,它会覆盖Mage_Page_Block_Html_Head创建的页面的整个Head内容,最后我的Html中会出现空头标记。像这样:

<head></head>

我哪里错了?不应该让Title.php中的上述代码(或缺少代码)让扩展类做到这一点,直到被告知这样做了吗?

这是模块的配置文件:

<config>

<modules>
    <Company_Metadata>
        <version>0.0.1</version>
    </Company_Metadata>
</modules>

<global>
    <blocks>
        <page>
            <rewrite>
                <html_head>Company_Metadata_Block_Title</html_head>
            </rewrite>
        </page>
    </blocks>
</global>

</config>

4 个答案:

答案 0 :(得分:2)

我的猜测是你必须在config.xml中声明你的块类。实际上,Magento知道你想要覆盖Head但是没有找到要使用的Block类。

请尝试使用此config.xml:

<modules>
    <Company_Metadata>
        <version>0.0.1</version>
    </Company_Metadata>
</modules>

<global>
    <blocks>


        <metadata>
            <class>Company_Metadata_Block</class>
        </metadata>


        <page>
            <rewrite>
                <html_head>Company_Metadata_Block_Title</html_head>
            </rewrite>
        </page>
    </blocks>
</global>

答案 1 :(得分:1)

确保您没有为您的模块禁用输出。仍然使用禁用的输出处理重写但模块即使调用父方法也无法显示任何内容

答案 2 :(得分:0)

您可能想尝试声明getTitle()并返回父方法。此外,<modules>节点应位于app / etc / modules / Company_Metadata.xml中,而您的节点将起作用,因为Magento将所有xml组合成一个大树,这是为了一致性(理智)。还有很多其他方法在Head.php中,看看它们是否仍然正常工作,如果是这样,那么你的xml重写是否正常工作。

<?php
class Company_Metadata_Block_Title extends Mage_Page_Block_Html_Head
{
    public function getTitle()
    {
        return parent::getTitle();
    }
}

答案 3 :(得分:0)

这是一个老问题,但由于我今天遇到了类似的问题并修复了它,我想我会分享我的解决方案以供将来参考。

我遇到了同样的问题,结果证明问题是由编译功能打开引起的。所以Magento选择了配置更改,但无法加载新代码,因为它不是编译代码的一部分。再次禁用编译或运行编译过程为我解决了问题。