我在覆盖核心文件时遇到问题。 基本路径是 app / code / core / Mage / Catalog / Block / Product / List.php
我的模块结构:
CompanyName/
ModuleName/
Block/
Product/
List.php
etc/
config.xml
我的档案: 应用的/ etc /模块/ CompanyName_ModuleName.xml
<config>
<modules>
<CompanyName_ModuleName>
<active>true</active>
<codepool>local</codepool>
</CompanyName_ModuleName>
</modules>
</config>
../公司名称/模块名的/ etc / config.xml中
<config>
<modules>
<CompanyName_ModuleName>
<version>1.0</version>
</CompanyName_ModuleName>
</modules>
<global>
<blocks>
<CompanyName_ModuleName>
<class>CompanyName_ModuleName_Block</class>
</CompanyName_ModuleName>
<catalog>
<rewrite>
<product_list>CompanyName_ModuleName_Block_Product_List</product_list>
</rewrite>
</catalog>
</blocks>
</global>
</config>
和 ../ CompanyName / ModuleName / Block / Product / List.php
class CompanyName_ModuleName_Block_Product_List extends Mage_Catalog_Block_Product_List
{
public function _getProductCollection()
{
(...)
}
}
我不知道为什么它不起作用。我看不出错误。
答案 0 :(得分:2)
你的案子中有一个拼写错误。在CompanyName_ModuleName.xml
中,它应该是
<codePool>local</codePool>
请注意P
中的驼峰字母codePool
。由于这个错字,magento很可能没有激活你的模块。这就是为什么通过你的模块没有任何事情发生
另外,对于重写块,您不需要定义块部分。这在config.xml
节点
global
就足够了
<blocks>
<catalog>
<rewrite>
<product_list>CompanyName_ModuleName_Block_Product_List</product_list>
</rewrite>
</catalog>
</blocks>
请注意,您的模块应位于local
代码池中。请确保也。
始终尽量避免Namespace
和modulename
中不需要的骆驼字母。实际上并没有错。但是,您可以使用CompanyName_ModuleName
代替Companyname_Modulename
。它可以帮助您避免不必要的拼写错误。
这是我的一个小推荐
尽管你在config.xml中不需要以下部分,但我想在这里提一件事。如果你的模块里面有自己的块,除了重写块,你应该在config.xml中有这个代码
<global>
<companyname_modulename> <!-- unique identifier; block reference -->
<class>CompanyName_ModuleName_Block</class>
<companyname_modulename>
....
</global>
稍后您将使用唯一标识companyname_modulename
来引用您的块。指定此参考节点的规则是&#34;它应该是唯一的&#34;。按照惯例,模块名称是
用于此。因此,惯例说,在这种情况下,您必须使用modulename
作为块引用。但是有一段时间,如果我们仅使用模块名称作为参考,则有机会与其他自定义扩展冲突。所以为了确保这一点是唯一的,我强烈推荐namespace_modulename
格式。请注意,我使用了小写字母。在你的情况下你也使用了Camel字母。这不是一个好习惯。
但上述情况与您的情况无关。由于您的模块本身不包含模块的任何块,而只包含重写块。所以上面提到的部分代码对你来说并不是必需的。这是因为,在重写部分,我们明确地告诉magento它应该在哪里寻找重写块。在您的情况下,您将其指定为CompanyName_ModuleName_Block_Product_List
。
希望有意义。