在Magento中扩展核心模型

3

我正在尝试扩展:Mage_Catalog_Model_Product_Visibility

我正在修改Visibility.php文件中的以下内容:

public function getVisibleInSiteIds()
  {
    return array(self::VISIBILITY_IN_SEARCH, self::VISIBILITY_IN_CATALOG, self::VISIBILITY_BOTH);
  }

Into:

public function getVisibleInSiteIds()
  {
    return array(self::VISIBILITY_IN_SEARCH, self::VISIBILITY_IN_CATALOG, self::VISIBILITY_BOTH, self::VISIBILITY_NOT_VISIBLE);
  }

已设置为“不可见”状态的过时产品仍然可以从其直接URL中显示(默认情况下,Magento会显示404错误页面)。

我通过修改核心文件进行了测试,并且它可以正常工作。但是我想创建一个小扩展程序,到目前为止我无法使其正常运行。我所做的如下:

app/etc/modules/CustomCode_InvisibleProducts.xml

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

app/code/local/CustomCode/InvisibleProducts/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <CustomCode_InvisibleProducts>
            <version>0.1.0</version>
        </CustomCode_InvisibleProducts>
    </modules>
    <global>
        <models>
            <customcode_invisibleproducts>
                <class>CustomCode_InvisibleProducts_Model</class>
            </customcode_invisibleproducts>
            <catalog>
                <rewrite>
                    <product_visibility>CustomCode_InvisibleProducts_Model_Catalog_Product_Visibility</product_visibility>
                </rewrite>
            </catalog>
        </models>
    </global>
</config>

app/code/local/CustomCode/InvisibleProducts/Model/Catalog/Product/Visibility.php

class CustomCode_InvisibleProducts_Model_Catalog_Product_Visibility extends Mage_Catalog_Model_Product_Visibility
{
     .....

一些问题可能是因为我没有正确扩展模型,因为似乎什么也没有发生/改变。
谢谢你的帮助!

你确定模块已经被加载了吗?你可以在 “System” -> “Configuration” -> “Advanced” -> “Disable Module Output” 中看到一个列表。如果它没有显示出来,请删除 Magento 缓存并再次尝试。 - Fabian Schmengler
是的,我做了,它在那里并且已启用。缓存被关闭了。 - Remy Nagelmaeker
重写配置看起来没问题。我的下一步是确定被覆盖的方法是否被调用(使用调试器或在方法中调用 Mage::log())。 - Fabian Schmengler
嗨,Fab!我不知道如何做这两件事。 - Remy Nagelmaeker
我已经将Mage::logo('Test')添加到Visibility.php文件中,但是在系统日志文件中没有任何显示。所以我猜想,我没有以正确的方式扩展/覆盖模型。有人知道我做错了什么吗? - Remy Nagelmaeker
我继续在原始的Visibility.php文件中添加Mage :: log('Test2'),这一次,日志显示出来了。 这证实了Magento仍然使用原始的Visibility.php。 我做错了什么? - Remy Nagelmaeker
2个回答

3
我已将扩展名从CustomCode_InvisibleProducts更改为CustomCode_Visible,因为我不知道还能做什么。
而且,一些神奇的事情发生了,这个扩展居然立刻开始工作了。
最终代码:
app/etc/modules/CustomCode_Visible.xml
<?xml version="1.0"?>
<config>
  <modules>
    <CustomCode_Visible>
      <active>true</active>
      <codePool>local</codePool>
    </CustomCode_Visible>
  </modules>
</config>

app/code/local/CustomCode/Visible/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <CustomCode_Visible>
            <version>0.2.0</version>
        </CustomCode_Visible>
    </modules>
    <global>
        <models>
            <customcode_visible>
                <class>CustomCode_Visible_Model</class>
            </customcode_visible>
            <catalog>
                <rewrite>
                    <product_visibility>CustomCode_Visible_Model_Catalog_Product_Visibility</product_visibility>
                </rewrite>
            </catalog>
        </models>
    </global>
</config>

app/code/local/CustomCode/Model/Catalog/Product/Visibility.php

class CustomCode_Visible_Model_Catalog_Product_Visibility extends Mage_Catalog_Model_Product_Visibility
{

  ....

        public function getVisibleInSiteIds()
    {
        return array(self::VISIBILITY_IN_SEARCH, self::VISIBILITY_IN_CATALOG, self::VISIBILITY_BOTH, self::VISIBILITY_NOT_VISIBLE);
    }

1
在你上一个代码块的正上方,有一个 app/code/local/CustomCode/Model/Catalog/Product/Visibility.php。难道它不应该是 app/code/local/CustomCode/Visible/Model/Catalog/Product/Visibility.php 吗? - Buttle Butkus

0

你没有在config.xml中声明你的模块

<modules>
    <CustomCode_InvisibleProducts>
        <version>0.1.0</version>
    </CustomCode_InvisibleProducts>
</modules>

在全局节点之前插入此代码。


非常感谢,dagfr。我已经进行了更改。但是,我仍然没有得到任何输出。 - Remy Nagelmaeker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接