【问题标题】:Magento custom block breaks site. Why?Magento 自定义块中断站点。为什么?
【发布时间】:2012-11-27 19:54:38
【问题描述】:

我正在为 magento 1.7 开发一个自定义块。我在我的配置 xml 中有这样声明的块。该模块还定义了一个运行良好的控制器。我需要一个带有一些逻辑的新块,所以我想我会使用我已经创建的模块。我在下面包含了块声明。

<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
    <Company_Catalog>
        <version>0.1.0</version>
    </Company_Catalog>
</modules>
<global>
    <blocks>
        <catalog>
            <class>Company_Catalog_Block</class>
        </catalog>
    </blocks>
</global>
</config>

我在我的主题中使用了 local.xml 中的块,使用以下语法:

<block type="catalog/featured" name="featuredproducts" before="-" template="catalog/featured.phtml"/>

该块看起来像我想要的那样,但问题是该站点的大部分其余部分都已损坏,并且 exception.log 中充满了 magento,正在寻找我模块中的其他块。例子:

2012-11-27T19:34:47+00:00 ERR (3):
exception 'Mage_Core_Exception' with message 'Invalid block type:Company_Catalog_Block_Product_List' in /home/project/site_content/app/Mage.php:594
2012-11-27T19:34:47+00:00 ERR (3):
exception 'Mage_Core_Exception' with message 'Invalid block type: Company_Catalog_Block_Product_List_Toolbar' in /home/project/site_content/app/Mage.php:594

我不想重写任何现有块,只需在我已经声明的模块中添加一个新块。

显然,我已经告诉 Magento 在我的模块中查找比我想要的更多的内容。这是我第一次尝试在 Magento 中使用自定义块,所以我不确定我做错了什么。

我知道“目录”也用于 Mage 命名空间,但我在自己的命名空间中工作。据我了解,应该没有冲突。

谢谢

【问题讨论】:

    标签: magento block magento-1.7


    【解决方案1】:

    您正在覆盖 Mage/Catalog/etc/config.xml 中的原始目录块类前缀

    <global>
        <blocks>
            <catalog>
                <class>Mage_Catalog_Block
    

    通过这样做,对目录块类型 (type="catalog/...") 的每个请求所使用的前缀都是 Company_Catalog_Block

    【讨论】:

    • 感谢您的回复。所以我认为对于块,我最好使用根本不出现在核心中的模块。对吗?
    • @ddhahn 如果你想创建自定义块,那么可以,使用核心不使用的“组名”(即“目录”)。我的标准做法是使用完整的包/模块名称(即 ...。这有点冗长,但可以避免任何可能的命名空间冲突。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多