आईडी से दक्ष को उत्पाद यूआरएल मिलता है


27

सिर्फ आईडी होने पर दिए गए उत्पाद url को प्राप्त करने का सबसे कुशल तरीका क्या है? हमारे कोड में कुछ स्थानों पर हमारे पास कुछ चीजें हैं जैसे Mage::getModel('catalog/product')->load($id)->getProductUrl()कि उत्पाद का URL प्राप्त करने के लिए, किसी उत्पाद से जुड़ी घटनाओं आदि की मात्रा को देखते हुए, बल्कि यह बेकार लगता है, क्या कोई सरल विधि है? श्रेणी आईडी निर्दिष्ट करने की क्षमता भी अच्छी होगी।

इसके अतिरिक्त, क्या किसी उत्पाद जैसे नाम के लिए एक ही विशेषता के लिए एक ही कार्य करने की एक कुशल विधि है?


1
क्या आपका प्रश्न यहाँ हल हो गया? क्या आपको इस प्रश्न पर अधिक सहायता की आवश्यकता है? यदि हां, तो हमें बताएं कि आपको समाधान खोजने में मदद करने के लिए क्या करने की आवश्यकता है।
philwinkle

जवाबों:


47

यह जानना दिलचस्प है कि क्या हम पूरे उत्पाद को लोड किए बिना उत्पाद URL प्राप्त कर सकते हैं। आपके अतिरिक्त प्रश्न का उत्तर देने के लिए क्षमा करें और मुख्य प्रश्न नहीं, क्योंकि मुझे यकीन नहीं है कि हम इसे प्राप्त कर सकते हैं :)

पूरे उत्पाद को लोड किए बिना एकल विशेषता प्राप्त करने के लिए, getAttributeRawValue()यदि आप Magento CE संस्करण 1.6+ का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं

Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);

नीचे दिए गए @ दर्शन की टिप्पणी के अनुसार, यहां अधिक अनुकूलित कोड है:

Mage::getResourceSingleton('catalog/product')
  ->getAttributeRawValue($productId, 'attribute_code', Mage::app()->getStore());

अद्यतन: पूरे उत्पाद को लोड किए बिना आईडी द्वारा उत्पाद URL प्राप्त करें:

Mage::getResourceSingleton('catalog/product')
  ->getAttributeRawValue($productId, 'url_key', Mage::app()->getStore());

8
Wowzers। उस एक के बारे में पता नहीं था! हर कोई इस जवाब को उकेरता है। यदि आप वास्तव में ऐंटी अप करना चाहते हैं, तो आप एक मौजूदा कैटलॉग / उत्पाद संसाधन मॉडल (इसके बजाय एक नए को इंस्टेंट करने के बजाय) को पुन: उपयोग कर सकते हैं getResourceSingleton। $ storeId में id नहीं होना चाहिए, यह एक Mage_Core_Model_Storeऑब्जेक्ट भी हो सकता है, इसलिए आप Mage::app()->getStore()चीजों को गति देने के लिए इनलाइन का उपयोग कर सकते हैं ।
philwinkle

और आप इसे कई विशेषताओं को लाने के लिए उपयोग कर सकते हैं: @param int। String | array $ विशेषता atrribute के id या कोड (1.7 में)
रिचर्ड

मुझे यह तरीका बहुत पसंद है। मैंने मतदान किया है। अगर URL पर कोई उत्तर नहीं आता है तो मैं स्वीकार करूंगा।
पीटर ओ'कैलाघन

क्या यह अभी भी उत्पाद आईडी के बिना उपयोग किया जा सकता है? यदि मेरे पास केवल एक SKU है, तो क्या मुझे मॉडल लोड करने के लिए मजबूर किया गया है?
pspahn

1
ध्यान दें कि यदि कोई उत्पाद एक से अधिक है तो url_keyयह काम नहीं कर सकता है क्योंकि Magento वाला url_key से एक अलग url फिर से लिखना बनाता है
Fra

11

मुझे लगता है कि एक संग्रह के माध्यम से ऐसा करना फायदेमंद होगा। यदि आपको पूरी उत्पाद जानकारी की आवश्यकता नहीं है, तो आप इसे एक संग्रह के माध्यम से लोड कर सकते हैं और इसलिए केवल आपकी आवश्यक जानकारी लोड करें। कोड निम्नानुसार होगा।

$product_collection = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToFilter('entity_id', 16)
    ->addUrlRewrite();
$product_collection_url = $product_collection->getFirstItem()->getProductUrl();

नोट: addUrlRewriteताकि आप बाद में उत्पाद url प्राप्त कर सकें, यह भी एक पैरामीटर के रूप में एक श्रेणी आईडी ले सकता है, इसके बिना url में श्रेणी नहीं होगी।

आप अभी भी कॉलिंग समाप्त कर रहे हैं getProductUrl()जिसका उपयोग करना समाप्त हो रहा है Mage_Catalog_Model_Product_Url, लेकिन इसके लिए केवल आईडी, request_path और url कुंजी की आवश्यकता है, इसलिए इसे पूर्ण उत्पाद के बिना काम करना चाहिए।


यह अच्छा काम करता है!
मुकेश चपागैन

ऐसा लगता है कि $ Product-> getProductUrl () आप सभी की जरूरत होनी चाहिए। "AddUrlRewrite ()" इसके अतिरिक्त अंतर बनाता है - उस उदाहरण को प्रदान करने के लिए धन्यवाद।
jschrab

4

मुझे लगता है कि URL को फिर से लिखने के लिए एक उत्पाद को फिर से लिखने के लिए सबसे प्रभावी तरीका है (w / o लोडिंग उत्पाद) सीधे URL पुनर्लेखन टैल्बे पर देखना है।

# returns string "product-url.html"
$productUrl = Mage::getResourceModel('core/url_rewrite')
    ->getRequestPathByIdPath('product/' . $productId, $storeId);

पूर्ण श्रेणी पथ प्राप्त करने के लिए, का उपयोग करें

# returns string "full/category/path/product-url.html"
$productUrl = Mage::getResourceModel('core/url_rewrite')
    ->getRequestPathByIdPath('product/' . $productId . '/' . $categoryId, $storeId);

संपादित करें: अन्य विशेषताओं के लिए "url_key" के लिए परीक्षण किया getAttributeRawValueजाना चाहिए।

  1. getRequestPathByIdPath

    • टोटल इंक्ल। दीवार समय (microsec): 8,323 microsecs
    • टोटल इंक्ल। CPU (microsecs): 8,038 microsecs
    • टोटल इंक्ल। मेम्यूज़ (बाइट्स): 273,872 बाइट्स
    • टोटल इंक्ल। पीकममूसे (बाइट्स): 213,488 बाइट्स
    • फ़ंक्शन कॉल की संख्या: 372
  2. getAttributeRawValue

    • टोटल इंक्ल। दीवार का समय (माइक्रोसेक): 51,213 माइक्रोसैक
    • टोटल इंक्ल। CPU (microsecs): 50,390 microsecs
    • टोटल इंक्ल। मेम्यूज़ (बाइट्स): 1,223,520 बाइट्स
    • टोटल इंक्ल। पीकममूसे (बाइट्स): 1,168,496 बाइट्स
    • फ़ंक्शन कॉल की संख्या: 2,233
  3. load(productId)

    • टोटल इंक्ल। दीवार का समय (माइक्रोसेक): 605,649 माइक्रोसैक
    • टोटल इंक्ल। CPU (microsecs): 598,820 microsecs
    • टोटल इंक्ल। मेम्यूज़ (बाइट्स): 5,370,848 बाइट्स
    • टोटल इंक्ल। पीकम्यूसे (बाइट्स): 5,314,384 बाइट्स
    • फ़ंक्शन कॉल की संख्या: 27,774

3

मुझे यह प्रश्न मिला, मुझे आश्चर्य हुआ। और अगर किसी और को किसी समय इसकी आवश्यकता होती है, तो मैं अपने स्वयं के निष्कर्ष यहां पोस्ट करूंगा।

मुझे पूर्ण उत्पाद लोड किए बिना उत्पाद URL प्राप्त करने के दो तरीके मिले। चूंकि मैं एक धीमी सर्वर पर काम कर रहा था, इसलिए मुझे सबसे तेज़ लोडिंग विधि खोजने की आवश्यकता थी।

पहली विधि:

उत्पाद आईडी के आधार पर उत्पाद का पहला संग्रह मिलता है:

$_item = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToSelect('product_url')
    ->addAttributeToFilter('entity_id', $productId)
    ->addUrlRewrite()
    ->load();

foreach($_item as $product){
    echo $product->getProductUrl();
}

// returns string "http://www.your-domain.com/[category]/[product_url]"

दूसरी विधि:

कल्पेश मेथा की विधि का उपयोग करने वाली दूसरी विधि, यह कोड होगी:

Mage::getResourceSingleton('catalog/product')
      ->getAttributeRawValue($productId, 'url_key', Mage::app()->getStore());

// returns string "product-url-like-this"

इस विधि के लिए, आप या तो उपयोग कर सकते हैं 'url_key'या 'url_path'। मुझे हालांकि अंतर नहीं पता चला है।

तरीकों के बीच का अंतर:

पहली विधि में थोड़ा अधिक समय (लगभग 15% अतिरिक्त) लगता है। हालाँकि दूसरी विधि, केवल URL के अंतिम भाग को लौटाती है। इसका मतलब यह है कि यदि दुकान URL में श्रेणी का उपयोग करती है, तो यह काम नहीं करेगा, क्योंकि यह हिस्सा नहीं दिखाया गया है। मैं जिस दुकान पर काम कर रहा था, उसमें यह मामला था।

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