Magento - 获取所有产品的产品集合

4
我需要一个包含所有产品的自定义产品集合。目前没有包含商店所有产品的分类(因为有8000个产品,我们无法将它们添加到一个额外的类别中)。
我需要在特定的CMS页面上显示所有产品的产品集合。 到目前为止,我有一个带有块的CMS页面:
{{block type="catalog/product_list" template="catalog/product/list.phtml"}}

我创建了一个模块来覆盖'Mage_Catalog_Block_Product_List'。

我认为需要编辑的函数是'protected function _getProductCollection()'。

从块调用中我们可以看到没有指定类别。在被覆盖的'_getProductCollection'函数中,我需要返回商店中的所有产品。

有没有什么方法可以实现这个目标?


你实际上需要一个包含所有产品的产品集合吗?还是你只需要在一个页面上显示所有产品,而你尝试的路线是一个产品集合? - Paul Gregory
我需要先获取网站上的所有产品,然后进一步筛选,只显示具有特定属性值的产品。由于产品涉及多个类别,所以我想先获取产品集合中的所有产品,然后进一步筛选,以便显示类似于list.phtml视图。 - 2133215543
不好的想法,这会使您的网站非常缓慢。您应该使用产品集合,但首先使用addAttributeToFilter(),然后再使用load() - Fabian Schmengler
2个回答

14

你可以通过多种方式获取商店产品列表。 尝试以下方法:

<?php
$_productCollection = Mage::getModel('catalog/product')
                        ->getCollection()
                        ->addAttributeToSort('created_at', 'DESC')
                        ->addAttributeToSelect('*')
                        ->load();
foreach ($_productCollection as $_product){
   echo $_product->getId().'</br>';
   echo $_product->getName().'</br>';
   echo $_product->getProductUrl().'</br>';
   echo $_product->getPrice().'</br>';
}
?>

3

不要覆盖列表块,否则将影响实际产品列表页面。

简单的方法是将文件复制到本地命名空间并重命名:

来自:

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

to:

app/code/local/Mage/Catalog/Block/Product/Fulllist.php

您可以使用新的区块而无需创建完整的模块,这意味着您的列表区块将正常工作,并且不会破坏您商店中的任何内容。

然后,您可以根据需要进行安全修改:

/**
 * Retrieve loaded category collection
 *
 * @return Mage_Eav_Model_Entity_Collection_Abstract
 */
protected function _getProductCollection()
{
    $collection = Mage::getModel('catalog/product')->getCollection();

    // this now has all products in a collection, you can add filters as needed.

    //$collection
    //    ->addAttributeToSelect('*')
    //    ->addAttributeToFilter('attribute_name', array('eq' => 'value'))
    //    ->addAttributeToFilter('another_name', array('in' => array(1,3,4)))
    //;

    // Optionally filter as above..

    return $collection;
}

您可以像这样使用新的块:
{{block type="catalog/product_fulllist" template="catalog/product/list.phtml"}}

谢谢您的回复。我已经按照您的指示添加了新的代码块。然而,当我运行代码主体时,没有任何内容显示(我的页脚消失了,这表明PHP停止了)。 - 2133215543
我已经在我的索引文件上尝试了以下代码if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE'])) { Mage::setIsDeveloperMode(true); } 和 ini_set('display_errors',1) ,但仍然无法获取错误消息。 - 2133215543
将包裹在Mage :: setIsDeveloperMode(true)周围的“if”注释掉,以便始终执行。 - Andrew
谢谢回复。我也试过了,但是仍然没有收到任何错误消息。还有其他建议吗? - 2133215543
我已经做了所有这些更改,但是问题仍然存在。如果我保留原始函数代码,则会出现“没有匹配的产品”消息,但是当我尝试使用自定义集合时它不起作用。 - 2133215543
显示剩余9条评论

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