제품 콜렉션에서 첫 번째 품목을 얻는 방법


23

카테고리 view.phtml에서 카테고리를 얻은 후 제품 컬렉션을 가져 오면 코드에서 사용하기 위해 $ _product에 할당 된 첫 번째 제품 양식을 어떻게 얻을 수 있습니까? 여기 내가 가진 것입니다 :

$_category   = $this->getCurrentCategory();
$_collection = $_category->getProductCollection();
$_product    = 
$_resource   = $_product->getResource();

foreach를 사용해 보았지만 오류가 계속 발생했습니다.


2
$_product = $_collection->getFirstItem()
pzirkind

1
@pzirkind이 answer.please을 넣어하면 댓글 넣지 마십시오
아 미트 Bera

1
나는 이것을 시도했지만 오류가 발생-잘못된 방법 Mage_Catalog_Block_Category_View :: canEmailToFriend (Array))
danny

1
@heisenberg은 당신이하지 exixt, 어느 쪽이든, 그 다른 오류 (원래의 질문으로 연결되지 않음), 하나가 새로운 코드를 사용하여 질문을 업데이트 않는 함수를 호출하거나 새로운 하나를 시작하려고 속에는
pzirkind를

@danny 여기에 답변이 있으면이 질문을 해결 된 것으로 표시하십시오.
sv3n

답변:


25

컬렉션의 첫 번째 항목을 얻으려면 컬렉션의 getFirstItem()함수를 사용하십시오 .

예:

// this gets all the products
$productCollection = Mage::getResourceModel('catalog/products_collection');
// this line gets just the first product
$firstItem = $productCollection->getFirstItem(); 

예 2 (이 특정 질문에 해당) :

$_category  = $this->getCurrentCategory();
$_collection = $_category->getProductCollection();
$_product =  $_collection->getFirstItem(); // this will get first item in collection

이것을 사용할 수있는 다른 영역들 :

고객

$customerCollection = Mage::getResourceModel('customer/customer_collection');
$firstCustomer = $customerCollection->getFirstItem();

명령

$orderCollection = Mage::getResourceModel('sales/order_collection');
$firstOrder = $orderCollection->getFirstItem();

참고 사항 :

이를 위해 모든 제품 / 고객 / 주문을로드하는 것은 좋은 생각이 아닙니다. 선호되는 방법은 addAttributeToFilter()또는 addFieldToFilter()함수 를 사용하여로드하려는 항목을 제한하는 것입니다 ( 아래 예 참조).

$productCollection = Mage::getResourceModel('catalog/product_collection')
                           ->addAttributeToFilter('sku', 'book123`);

5

pzirkind 는 완전히 정확하며 아무도 성능에 신경 쓰지 않을지 궁금합니다. 컬렉션의 첫 번째 / 마지막 항목 원하는 경우 항상 쿼리를 1다음으로 제한해야합니다 .

$collection->getSelect()->limit(1);

그냥 사용 getFirstItem()하면 여전히 전체 컬렉션을로드 한 후 첫 번째 항목을 가져옵니다.


: 제품이 750 개인 카테고리

$category = Mage::getModel('catalog/category')->load(41);
$collection = $category->getProductCollection();
# $collection->getSelect()->limit(1);
var_dump($collection->getSelect()->__toString());
var_dump($collection->getFirstItem()->getData());

그냥 getFirstItem():

  • 총계 월 시간 (마이크로 초) : 2,318,497 마이크로 초
  • 총계 CPU (마이크로 초) : 2,000,604 마이크로 초
  • 총계 MemUse (바이트) : 7,729,776 바이트
  • 총계 PeakMemUse (바이트) : 7,977,672 바이트
  • 함수 호출 수 : 96,957

추가 getSelect()->limit(1):

  • 총계 월 시간 (마이크로 초) : 424,955 마이크로 초
  • 총계 CPU (마이크로 초) : 380,326 마이크로 초
  • 총계 MemUse (바이트) : 4,043,728 바이트
  • 총계 PeakMemUse (바이트) : 3,976,000 바이트
  • 함수 호출 수 : 15,249

2
두 가지 솔루션을 다루고 실행 시간을 제공하며 성능 이점 +1
BENN1TH

3
var_dump($_collection->getFirstItem()->getData());
echo $_collection->getFirstItem()->getName();

마지막 아이템을 얻는 방법 :

echo $_collection->getLastItem()->getName();
var_dump($_collection->getLastItem()->getData()); 

2

@pZirKind는 Varien Collection 클래스의 기본 메소드를 사용하여 제품 콜렉션에서 첫 번째 항목을 얻을 수 있습니다.

$_category  = $this->getCurrentCategory();

$_collection = $_category->getProductCollection();

$_product = $_collection->getFirstItem()

0
$Collection = Mage::getResourceModel('catalog/products_collection');
$firstItem = $Collection->getFirstItem(); 

0

이것을 시도하십시오

    $_category  = $this->getCurrentCategory();        
    $_collection = $_category->getProductCollection();        
    $_items = $_productCollection->getItems(); 
   if($_items){  
    $_items[0]->getShortName();
    $_items[0]->getProductUrl();
   }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.