【问题标题】:Magento: Block override stops phtml from displayingMagento:阻止覆盖阻止phtml显示
【发布时间】:2014-08-11 22:14:07
【问题描述】:

我正在开发一个 Magento 项目,并且我已经覆盖了 Page Html Header 块,因为我需要更改 getLogoSrc() 函数的方式(我在 app/code/core/Mage/Page/Block/Html /Header.php)。但是,由于不再绘制 header.phtml,我似乎做错了什么。

app/code/local/NameSpace/Customize/Block/Html/Header.php

class NameSpace_Page_Block_Html_Header extends Mage_Page_Block_Html_Header
{
    ...Code...
}

app/code/local/NameSpace/Customize/etc/config.xml

<config>
    <modules>
        <NameSpace_Customize>
            <version>0.1.0</version>
        </NameSpace_Customize>
    </modules>
    <helpers>
        <customize>
            <class>NameSpace_Customize_Helper</class>
        </customize>
    </helpers>
    <global>
        <blocks>
            <page>
                <rewrite>
                    <html_header>NameSpace_Page_Block_Html_Header</html_header>
                </rewrite>
            </page>
        </blocks>
    </global>
</config>

app/etc/modules/NameSpace_Customize.xml

<config>
    <modules>
        <NameSpace_Customize>
            <active>true</active>
            <codePool>local</codePool>
        </NameSpace_Customize>
    </modules>
</config> 

当我删除 config.xml 中 &lt;global&gt; 标记内的所有内容时,标题会正确显示。

这是我的第一个 Magento 项目,所以我可能走错了路。任何输入将不胜感激。

谢谢

【问题讨论】:

    标签: php xml magento overriding


    【解决方案1】:

    块类名称必须与其所在的文件夹匹配。

    class NameSpace_Customize_Block_Html_Header extends Mage_Page_Block_Html_Header
    {
        // do not write any more in here until you've tested at least once
    }
    

    也在 config.xml 中进行等效更改。此外,&lt;helpers&gt; 节点必须在 &lt;global&gt; 节点内。

    <config>
        <modules>
            <NameSpace_Customize>
                <version>0.1.0</version>
            </NameSpace_Customize>
        </modules>
        <global>
            <helpers>
                <customize>
                    <class>NameSpace_Customize_Helper</class>
                </customize>
            </helpers>
            <blocks>
                <page>
                    <rewrite>
                        <html_header>NameSpace_Customize_Block_Html_Header</html_header>
                    </rewrite>
                </page>
            </blocks>
        </global>
    </config>
    

    【讨论】:

    • 只是一个意见,但我会将所有内容规范化为命名空间(包括文件夹)而不是命名空间。词的属性插入很难想出一套可靠的规则,而且肯定会犯错。