2

我需要开始$collection->setPage(0, 10);使用我的非 EAV 模型,但它不起作用。我试过了,$matches->getSelect()->setPage(0, 10);但没有帮助。

4

2 回答 2

5

setPage()方法仅适用于 Magento 中基于 EAV 的集合,因为它是在Mage_Eav_Model_Entity_Collection_Abstract类中定义的......

public function setPage($pageNum, $pageSize)
{
    $this->setCurPage($pageNum)
        ->setPageSize($pageSize);
    return $this;
}

如您所见,它是一个很好的速记实用程序,可用于基于 EAV 的集合。对于基于非 EAV 的集合,您可以在集合类中创建自己的版本,或者在初始化集合时使用更详细的语法在客户端代码中设置页码和大小:

$collection->setCurPage($pageNum)
           ->setPageSize($pageSize)
;
于 2012-07-16T19:12:25.000 回答
1
public function updateIndex()
{
    $productsCollection = Mage::getModel('catalog/product')->getCollection()
        ->addAttributeToSelect(array('name', 'image', 'url_key', 'price', 'visibility'));

    $productsCollection->setPageSize(100);

    $pages = $productsCollection->getLastPageNumber();
    $currentPage = 1;

    do {
        $productsCollection->setCurPage($currentPage);
        $productsCollection->load();

        foreach ($productsCollection as $_product) {

            $insertData = array(
                'entity_id' => $_product->getId(),
                'title' => $_product->getName(),
                'image' => $_product->getImage(),
                'url' => $_product->getUrlKey(),
                'price' => $_product->getFinalPrice(),
            );

            $this->_getWriteAdapter()->insertOnDuplicate(
                $this->getTable('atwix_sonar/suggestions'),
                $insertData,
                array('title', 'image', 'url', 'price')
            );
        }

        $currentPage++;
        //clear collection and free memory
        $productsCollection->clear();
    } while ($currentPage <= $pages);
}

请参阅这个完整的示例,它准确地说明了如何使用 magento 集合寻呼机功能。资料来源: http: //www.atwix.com/magento/working-with-large-collections/

于 2015-07-20T11:23:45.720 回答