如何在Magento的非EAV模型中使用setPage()进行分页/限制?

时间:2012-07-16 19:10:24

标签: magento

我需要让$collection->setPage(0, 10);使用我的非EAV模型并且它不起作用。我已经尝试了$matches->getSelect()->setPage(0, 10);并且没有帮助。

2 个答案:

答案 0 :(得分: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)
;

答案 1 :(得分: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/