Як отримати перший товар із колекції товарів


23

Якщо я отримаю категорію view.phtml, якщо я отримаю категорію, а потім отримаю колекцію продуктів, як я можу отримати форму першого продукту, яку колекція призначена $ _product для використання в коді? Ось що я маю:

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

Я спробував використовувати foreach, але продовжував отримувати помилки.


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

1
@pzirkind поставив цю відповідь. Моліться, не ставте коментар
Amit Bera

1
Я спробував це, але помилка - Недійсний метод Mage_Catalog_Block_Category_View :: canEmailToFriend (масив)
danny

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 мікросекунди
  • Всього в т.ч. ЦП (мікросекунди): 2 000 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
Це ідеально, оскільки він охоплює два рішення та забезпечує час виконання, а також пояснює переваги продуктивності +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

Спробуйте це, будь ласка

    $_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.