【问题标题】:Show deactivated/disabled products in comparison view在比较视图中显示停用/禁用的产品
【发布时间】:2014-01-06 11:32:33
【问题描述】:

我正在尝试在比较视图中显示产品,通过管理面板将其设置为status = disabled

在默认的 magento 中,这似乎是不可能的,因为禁用的产品在 产品列表页面 以及 产品详细信息页面 中不可见。

不知何故,我设法通过覆盖Mage_Catalog_Helper_Product产品列表页面产品详细信息页面 中显示禁用的产品。其中我注释了以下代码:

    // if (!$this->canShow($product)) {
    //     return false;
    // }

现在,请有人帮助我了解如何在比较视图中显示禁用的产品?

【问题讨论】:

  • 我在核心文件中搜索了完整的比较部分,但我找不到任何东西..

标签: php magento magento-1.8


【解决方案1】:

可能要检查: 公共功能已启用

在 magento\app\code\core\Mage\Catalog\Helper\Product\Flat.php

【讨论】:

  • 您可能需要小心,因为这依赖于使用平面表的商店。并非所有商店都出于某种原因启用了此功能。
【解决方案2】:

我快速查看了创建列表的块。一个好的起点是以下文件:

app/code/core/Mage/Catalog/Block/Product/Compare/List.php

有一个函数 getItems 负责让项目准备好在前端显示。在这个函数的最后,它通过可见性方法传递项目:

Mage::getSingleton('catalog/product_visibility')
                ->addVisibleInSiteFilterToCollection($this->_items);

我不是 100% 确定删除这最后一段代码是否能得到你想要的,但在一个非常基本的层面上,你可以更改集合以忽略你设置的状态。

【讨论】:

  • 如果我评论/删除上面的代码,我可以在我的比较部分得到simple products。我的意思是代码用于启用simple products 而不是discontinued/disabled 产品。我 100% 确定,因为我最近在我的项目中这样做了 :)
【解决方案3】:

找了半天也没能从法师核心文件中提取解决方案,我创建了一个属性和status属性一样。我将该属性命名为Archive(是/否)。这个新属性将证明产品是否停产。

最后,我只过滤与此新属性Archive 相关的所有产品列表、产品详细信息和主页。

我正计划编写一个 MVC 操作,它将所有产品 status 更改为 enabled,同时将 Archive 触发为是 status = disabled 产品。我很快就会在这里分享代码。

代码

编写一个虚拟控制器,在调用 url 时运行以下代码:

public function updateproductsAction() {
    Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

    $collectionConfigurable = Mage::getResourceModel('catalog/product_collection')
            ->addAttributeToFilter('type_id', array('eq' => 'configurable'))
            ->addAttributeToFilter('entity_id', array('gt' => 0));      // This line should be removed to affect all the configurable products. (to avoid execution time-out)

    echo 'Total are ' . count($collectionConfigurable) . '<br/>';
    $i = 1;                         
    foreach($collectionConfigurable as $p) {
        $product = Mage::getModel('catalog/product')->load($p->getId());
        $product->save();
        echo $i++ . ') The product Id with ' . $p->getId() . " is done...." . "<br/>";  // if the execution time-out occurs, note down the last product id and change the value above in addAttributeToFilter. so the execution runs from the last stopped product.
    }
}

【讨论】:

    猜你喜欢
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    相关资源
    最近更新 更多