如何从产品系列中获取第一项


23

在类别view.phtml上,如果我获得类别,然后获得产品集合,如何从分配给$ _product的集合中获得第一个产品以用于代码中?这是我所拥有的:

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

我尝试使用foreach,但始终出现错误。


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

1
@pzirkind发表了这个答案。请不要发表评论
Amit Bera

1
我尝试了此操作,但遇到错误-无效的方法Mage_Catalog_Block_Category_View :: canEmailToFriend(Array))
丹尼

1
@heisenberg表示您正在尝试调用一个不存在的函数,无论哪种方式,它是一个不同的错误(与您的原始问题无关),或者使用新代码更新您的问题或启动一个新代码
pzirkind

@danny如果您在此处找到答案,请接受以将该问题标记为已解决。
sv3n

Answers:


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

请尝试这个

    $_category  = $this->getCurrentCategory();        
    $_collection = $_category->getProductCollection();        
    $_items = $_productCollection->getItems(); 
   if($_items){  
    $_items[0]->getShortName();
    $_items[0]->getProductUrl();
   }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.