为什么Magento试图调用Mage命名空间而不是我的自定义命名空间?

时间:2010-01-28 14:13:24

标签: php magento

我在自定义命名空间的本地代码文件夹中创建了一个模块。 该块未显示在前端,并且在检查异常日志时,发现Magento正在查找错误的位置。

exception ‘Mage_Core_Exception’ with message ‘Invalid block type:
Mage_MyCompany_ForthcomingProducts_Block_List’
in /var/www/html/app/Mage.php:407

如果在调用块时排除MyCompany_前缀,也会出现同样的情况;它仍然在Mage命名空间中查找。 我在modules文件夹中名为MyCompany_All.xml的文件中有这个,我添加的CMS布局工作正常,所以Magento肯定是加载它:

<?xml version="1.0"?>
<config>
    <modules>
        <MyCompany_CmsLayouts>
            <codePool>local</codePool>
            <active>true</active>
        </MyCompany_CmsLayouts>
        <MyCompany_ForthcomingProducts>
            <codePool>local</codePool>
            <active>true</active>
        </MyCompany_ForthcomingProducts>
    </modules>
</config>

有没有人对导致这种情况的原因有任何想法?

<小时/> 补充:该块由一个带有此模板代码的静态块调用:

{{block type="MyCompany_ForthcomingProducts/List" template="forthcomingproducts/list.phtml"}}

该块的config.xml是:

<?xml version="1.0" encoding="utf-8"?>
    <config>
        <modules>
            <MyCompany_ForthcomingProducts>
                <version>0.9</version>
            </MyCompany_ForthcomingProducts>
        </modules>

        <global>
            <blocks>
                <forthcomingproducts>
                    <class>MyCompany_ForthcomingProducts_Block</class>
                </forthcomingproducts>
            </blocks>
       </global>
    </config>

1 个答案:

答案 0 :(得分:7)

尝试按如下方式调整块声明:

{{block type="forthcomingproducts/list" template="forthcomingproducts/list.phtml"}}

在您的配置文件中,您为块(forthcomingproducts)定义了别名,现在您应该关注它。 Magento会根据您的请求将forthcomingproducts取消引用为MyCompany_ForthcomingProducts_Block,然后附加大写的类名(list),创建类名MyCompany_ForthcomingProducts_Block_List。当您使用Magento不知道的alis(在您的示例中为MyCompany_ForthcomingProducts)时,它被假定为Mage名称空间的一部分。

希望有所帮助, 乔