उत्पाद संग्रह से पहला आइटम कैसे प्राप्त करें


23

यदि मैं श्रेणी प्राप्त करता हूं और फिर उत्पाद संग्रह प्राप्त करता हूं, तो श्रेणी view.phtml पर मैं कोड में उपयोग के लिए $ _product को दिए गए संग्रह को पहला उत्पाद कैसे प्राप्त कर सकता हूं? यही सब कुछ मेरे पास है:

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

मैंने फ़ॉर्च का उपयोग करने की कोशिश की, लेकिन त्रुटि मिलती रही।


2
$_product = $_collection->getFirstItem()
पजिरकिंड

1
@pzirkind इस answer.please डाल यह टिप्पणी न रखें
अमित बेरा

1
मैंने यह कोशिश की लेकिन त्रुटि हो रही है - अमान्य विधि Mage_Catalog_Block_Category_View :: canEmailToFriend (Array))
danny

1
@heisenberg कि आप जिस फ़ंक्शन को कॉल करने का प्रयास कर रहे हैं, वह एक्ज़िट नहीं करता है, किसी भी तरह से, इसकी एक अलग त्रुटि (आपके मूल प्रश्न से जुड़ा नहीं), या तो नए कोड के साथ अपने प्रश्न को अपडेट करें या एक नया शुरू करें
pzirkind 1

@ डैनी यदि आपको यहां कोई उत्तर मिला है, तो कृपया इस प्रश्न को हल करने के लिए स्वीकार करें।
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():

  • टोटल इंक्ल। दीवार समय (microsec): 2,318,497 microsecs
  • टोटल इंक्ल। CPU (microsecs): 2,000,604 microsecs
  • टोटल इंक्ल। मेम्यूज़ (बाइट्स): 7,729,776 बाइट्स
  • टोटल इंक्ल। पीकममूसे (बाइट्स): 7,977,672 बाइट्स
  • फ़ंक्शन कॉल की संख्या: 96,957

जोड़ना getSelect()->limit(1):

  • टोटल इंक्ल। दीवार समय (microsec): 424,955 microsecs
  • टोटल इंक्ल। CPU (microsecs): 380,326 microsecs
  • टोटल इंक्ल। मेम्यूज़ (बाइट्स): 4,043,728 बाइट्स
  • टोटल इंक्ल। पीकममूसे (बाइट्स): 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 सही है आप उत्पाद संग्रह से पहली वस्तु प्राप्त कर सकते हैं जैसे कि वैरिएन कलेक्शन क्लास के मूल तरीकों का उपयोग करके:

$_category  = $this->getCurrentCategory();

$_collection = $_category->getProductCollection();

$_product = $_collection->getFirstItem()


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.