Как получить первый товар из коллекции товара


23

В категории view.phtml, если я получу категорию, а затем получу коллекцию продуктов, как я могу получить первый продукт из коллекции, присвоенной $ _product для использования в коде? Вот что у меня есть:

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

Я пытался использовать foreach, но продолжал получать ошибки.


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

1
@pzirkind поместите этот ответ. Пожалуйста, не оставляйте его в комментариях
Амит Бера

1
Я пробовал это, но получаю ошибку - Неверный метод Mage_Catalog_Block_Category_View :: canEmailToFriend (Array))
Денни

1
@heisenberg, что означает, что вы пытаетесь вызвать функцию, которая не вызывает, в любом случае, другую ошибку (не связанную с вашим исходным вопросом), либо обновите ваш вопрос новым кодом, либо запустите новый
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 мкс
  • Всего вкл. ЦП (микросекунд): 2000 604 микросекунд
  • Всего вкл. MemUse (байты): 7,729,776 байтов
  • Всего вкл. PeakMemUse (байты): 7 977 672 байта
  • Количество функциональных вызовов: 96,957

Добавление getSelect()->limit(1):

  • Всего вкл. Время стены (мкс): 424 955 мкс
  • Всего вкл. ЦП (микросекунды): 380 326 микросекунд
  • Всего вкл. MemUse (байты): 4,043,728 байтов
  • Всего вкл. PeakMemUse (байты): 3 976 000 байтов
  • Количество функциональных вызовов: 15,249

2
Это идеальный
вариант,

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

Попробуйте это пожалуйста

    $_category  = $this->getCurrentCategory();        
    $_collection = $_category->getProductCollection();        
    $_items = $_productCollection->getItems(); 
   if($_items){  
    $_items[0]->getShortName();
    $_items[0]->getProductUrl();
   }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.