Làm thế nào để có được sản phẩm đầu tiên từ bộ sưu tập sản phẩm


23

Trên danh mục view.phtml nếu tôi nhận được danh mục và sau đó nhận được bộ sưu tập sản phẩm, làm cách nào tôi có thể lấy mẫu sản phẩm đầu tiên mà bộ sưu tập được gán cho $ _product để sử dụng trong mã? Đây là những gì tôi có:

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

Tôi đã thử sử dụng foreach nhưng vẫn nhận được lỗi.


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

1
@pzirkind đặt câu trả lời này. Xin vui lòng không đưa ra nhận xét
Amit Bera

1
Tôi đã thử cách này nhưng gặp lỗi - Phương thức không hợp lệ Mage_Catalog_Block_Carget_View :: canEmailToFriend (Array))
danny

1
@heisenberg rằng bạn đang cố gọi một hàm không có lỗi, dù sao đi nữa, đó là một lỗi khác (không được kết nối với câu hỏi ban đầu của bạn), hoặc cập nhật câu hỏi của bạn bằng mã mới hoặc bắt đầu một câu hỏi mới
pzirkind

@danny nếu bạn tìm thấy câu trả lời ở đây, vui lòng chấp nhận đánh dấu câu hỏi này là đã được giải quyết.
sv3n

Câu trả lời:


25

Để có được mục đầu tiên trong bộ sưu tập, chỉ cần sử dụng getFirstItem()chức năng trên bộ sưu tập.

Thí dụ:

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

Ví dụ 2 (cho câu hỏi cụ thể này):

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

Một số lĩnh vực khác có thể được sử dụng:

Khách hàng

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

Đơn đặt hàng

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

Xin lưu ý:

Nó không phải là một ý tưởng tốt để tải TẤT CẢ các sản phẩm / khách hàng / đơn đặt hàng cho việc này tốn rất nhiều tài nguyên. Cách ưa thích là giới hạn những gì bạn muốn tải bằng cách sử dụng các hàm addAttributeToFilter()hoặc addFieldToFilter(), xem ví dụ bên dưới:

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

5

pzirkind là hoàn toàn chính xác, chỉ tự hỏi rằng không ai quan tâm đến hiệu suất. Nếu bạn CHỈ muốn mục đầu tiên / cuối cùng của bộ sưu tập, bạn phải luôn giới hạn truy vấn của mình ở 1:

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

Chỉ cần sử dụng getFirstItem()vẫn sẽ tải toàn bộ bộ sưu tập và sau đó nó khoe khoang mục đầu tiên.


Ví dụ : danh mục với 750 sản phẩm

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

Chỉ cần getFirstItem():

  • Tổng số bao gồm Thời gian treo tường (microsec): 2.318.497 microsec
  • Tổng số bao gồm CPU (microsecs): 2.000.604 microsec
  • Tổng số bao gồm MemUse (byte): 7,729,776 byte
  • Tổng số bao gồm PeakMemUse (byte): 7.977.672 byte
  • Số lượng cuộc gọi chức năng: 96.957

Thêm getSelect()->limit(1):

  • Tổng số bao gồm Thời gian treo tường (microsec): 424.955 microsec
  • Tổng số bao gồm CPU (microsec): 380.326 microsec
  • Tổng số bao gồm MemUse (byte): 4.043.728 byte
  • Tổng số bao gồm PeakMemUse (byte): 3.976.000 byte
  • Số lượng các cuộc gọi chức năng: 15.249

2
Điều này là lý tưởng vì nó bao gồm hai giải pháp và cung cấp thời gian thực hiện và giải thích các lợi ích về hiệu suất +1
BENN1TH

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

Ngoài ra làm thế nào để có được Mục cuối:

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

2

@pZirKind đúng, bạn có thể lấy mục đầu tiên từ bộ sưu tập sản phẩm bằng cách sử dụng các phương thức gốc của lớp Bộ sưu tập Varien như:

$_category  = $this->getCurrentCategory();

$_collection = $_category->getProductCollection();

$_product = $_collection->getFirstItem()

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

0

Làm ơn thử cái này

    $_category  = $this->getCurrentCategory();        
    $_collection = $_category->getProductCollection();        
    $_items = $_productCollection->getItems(); 
   if($_items){  
    $_items[0]->getShortName();
    $_items[0]->getProductUrl();
   }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.