제품 컬렉션을 필터링하고 페이지 매김을 지정하려고합니다. 모든 것이 괜찮습니다 - 페이지 매김을 제외하고. 메신저는 첫 번째 페이지에 대해 3 개의 항목 대신 전체 컬렉션을 다시 가져옵니다.Magento : 필터링 된 제품 모음 페이지 넘김
//fetch all visible products
$product_collection = Mage::getModel('catalog/product')->getCollection();
//set wanted fields (nescessary for filter)
$product_collection->addAttributeToSelect('name');
$product_collection->addAttributeToSelect('description');
$product_collection->addAttributeToSelect('price');
$product_collection->addAttributeToFilter('visibility', array('neq' => 1));
//filter by name or description
$product_collection->addFieldToFilter(array(
array('attribute'=>'name','like'=>$sTerm),
array('attribute'=>'description','like'=>$sTerm)
));
//filter for max price
foreach ($product_collection as $key => $item) {
if($item->getPrice() >= $priceTo){
$product_collection->removeItemByKey($key);
}
}
//pagination (THIS DOESNT WORK!)
$product_collection->setPageSize(3)->setCurPage(1);
//TEST OUTPUT
foreach ($product_collection as $product) {
echo $product->getName().'<br />';
}
감사합니다.
지금까지 감사합니다! 컬렉션을 다시 생성하려고했습니다 : '$ product_filtered_collection = new Varien_Data_Collection(); foreach ($ product_collection $ item) { $ product_filtered_collection-> addItem ($ item); } '...이 새 컬렉션에 페이지 매김을 추가했습니다. 하지만 그 중 하나가 작동하지 않습니다. –
어. 나는 방금 당신의 게시물을 다시 읽었습니다. 해결할 두 가지 큰 문제가 있습니다. 콜렉션을 페이지 매기기 (paraginate)하기 위해서는 데이터를로드하기 위해 원래의 쿼리에 가격 필터링을 포함시켜야합니다 (foreach()가 데이터를 먼저로드하므로 그렇지 않습니다) 또한 최종 가격 로직 Magento는이 컬렉션의 항목에 대해 실행되지 않는 옵저버의 영향을받을 수 있습니다. 죄송합니다. – benmarks
예 @ 벤! 올바른 방향으로 나를 가리켰습니까. 이제 작동합니다. 약 4 시간 후 작업 예제를 게시합니다. 내 신용도가 너무 낮습니다.) 기본적으로 새 컬렉션을 만들고 항목의 제품 ID로 필터링 한 다음 나중에 페이지 매김합니다. –