उत्पाद URL और छवि प्राप्त करने का कुशल तरीका


12

एक Magento के webshop के अलावा के निर्माण के दौरान, मैं समस्याओं की एक जोड़ी पर ठोकर खाई। कोड बनाने के लिए मेरी खोज में जो जितनी जल्दी हो सके, मैंने पाया कि मैं दो चीजों का पता लगाने में असमर्थ हूं।

मेरा (प्रासंगिक) कोड निम्नलिखित है:

$rc = Mage::getResourceSingleton('catalog/product');
$productName = $rc->getAttributeRawValue($productId, 'name', Mage::app()->getStore());
$productPrice = $rc->getAttributeRawValue($productId, 'price', Mage::app()->getStore());
$productImage = $rc->getAttributeRawValue($productId, 'image', Mage::app()->getStore());
$productUrl = $rc->getAttributeRawValue($productId, 'url_key', Mage::app()->getStore());

जिन दो चीजों का मैं पता नहीं लगा सकता, वे हैं:

1) मैं उत्पाद URL कैसे प्राप्त करूं? url_keyहमेशा सही URL नहीं देता है, क्योंकि सभी webshops कैनोनिकल URL का उपयोग नहीं करते हैं, या URL में श्रेणी होती है।

2) मैं पूर्ण छवि के बजाय एक सेट चौड़ाई / ऊंचाई के साथ उत्पाद छवि कैसे प्राप्त कर सकता हूं? ->resize()समारोह इस मामले मैं टोह में काम नहीं करता (क्योंकि यह एक URL मिलता है)। इसके अलावा, क्या यह संभव है Base Image, Small Imageऔर Thumbnailअलग से?

मेरा मुख्य लक्ष्य कोड को यथासंभव तेज रखना है। मेरे पास केवल एक उत्पाद आईडी है, क्योंकि मैं किसी उत्पाद के बच्चों के माध्यम से लूप करता हूं। मैं उपयोग करने की इच्छा नहीं करता हूं ->load()क्योंकि अधिक लोडिंग समय लगता है।

जवाबों:


7

आप इसे इस तरह से कर सकते हैं:

$smallImage = $rc->getAttributeRawValue($productId, 'small_image', Mage::app()->getStore());
$imageModel = Mage::getModel('catalog/product_image');
$imageModel->setDestinationSubdir('small_image');
$imageModel->setBaseFile($smallImage);
var_dump($imageModel->getUrl());

अनुरूपता, आप इसे "छवि" और "थंबनेल" के लिए भी कर सकते हैं।


यह नियमित छवि के लिए काम करता है, लेकिन यह इसके लिए एक गलत फ़ोल्डर का चयन करता है small_image। ऐसा लगता है कि छोटी छवियां सभी का आकार परिवर्तन हो जाता है, और यह संशोधित संस्करण का चयन नहीं करता है। किसी भी विचार कैसे हल करने के लिए? और क्या आपके पास उत्पाद URL का कोई समाधान भी है?
Sander Koedood

@SanderKoedood रीसाइज़िंग के लिए, $ imageModel-> setWidth (150) -> setHeight (150) -> resize () -> getUrl () जोड़ें;
10

150 के बजाय, उन मूल्यों का उपयोग करें जिनकी आपको ज़रूरत है;)
mpaepper

मेरा ज्ञान दूर तक फैल गया ;-) लेकिन इसे इंगित करने के लिए धन्यवाद। हालाँकि, यह गलत फ़ोल्डर लोड हो रही साइट की समस्या को नहीं बदलता है। इसलिए छोटी छवि का उपयोग करते समय कोई छवि नहीं दिखाई देती है।
सैंडर कोएडूद

5
$productId = 'SOME_PRODUCT_ID';
$product = Mage::getModel('catalog/product')->load($productId);
$productMediaConfig = Mage::getModel('catalog/product_media_config');

$baseImageUrl = $productMediaConfig->getMediaUrl($product->getImage());
$smallImageUrl = $productMediaConfig->getMediaUrl($product->getSmallImage());
$thumbnailUrl = $productMediaConfig->getMediaUrl($product->getThumbnail());

यदि मैं कोड से ऊपर चला जाता हूँ तो ब्राउज़र खाली पृष्ठ वापस कर देता है मेरा कोड: justpaste.it/7hwc9
Gem

3

छवि URL प्राप्त करने के लिए नीचे दिए गए कोड की कोशिश करें:

<?php echo Mage::helper('catalog/image')->init($product, 'thumbnail'); ?>
<?php echo Mage::helper('catalog/image')->init($_product, 'small_image') ?>

या

$productId = 1; // get product ID dynamically instead of 1.
$products = Mage::getModel('catalog/product')->load($productId);
$productUrl = $products->getProductUrl();
$baseImage = $products->getImage(); 
$SmallImage = $products->getSmallImage(); 
$thumbnail = $products->getThumbnail(); 

या

To get product URL:
$_products->getProductUrl();

2

आप $ उत्पादों / $ उत्पाद चर के बिना नहीं कर सकते:

उत्पाद के लिए Url:

$product->getUrlPath();
'mondrian-large-coffee-table-set-multicolour'

$product->getUrlPath($category);
'tables/mondrian-large-coffee-table-set-multicolour'

// आप इस विधि को URL में ___store को जोड़कर नहीं रोक सकते हैं, यहां तक ​​कि झूठ के लिए _store_to_url सेट करके

$product->getUrlInStore();
'http://made.local/tables/mondrian-large-coffee-table-set-multicolour?___store=default'

** // आप इस विधि को URL में ___store को जोड़ने से नहीं रोक सकते, यहां तक ​​कि _store_to_url को झूठा // नोट पर सेट करके - नीचे "parignore_category" का उपयोग करके एक तर्कपूर्ण बग के लिए इस पार्सर का उपयोग करके देखें **

$product->getUrlInStore(array('_ignore_category' => true));
'http://made.local/mondrian-large-coffee-table-set-multicolour?___store=default'

$product->getProductUrl();
'http://made.local/tables/mondrian-large-coffee-table-set-multicolour'

$product->getProductUrl(true);
'http://made.local/tables/mondrian-large-coffee-table-set-multicolour'

उत्पाद के लिए छवि:

$productId = 1; 
$products = Mage::getModel('catalog/product')->load($productId);
$products->getImage(); $products->getSmallImage(); 
$products->getThumbnail(); 

यदि आप चाहते हैं कि छवि url टैग में उपयोग हो,

Mage::helper('catalog/image')->init($products, 'small_image')->resize(163,100); // resize function is used to resize image 
Mage::helper('catalog/image')->init($products, 'image')->resize(400,400); 
Mage::helper('catalog/image')->init($products, 'thumbnail')->resize(60,60); 

मैं पहले ही का परिणाम प्राप्त कर $product->getUrlPath();चुका हूं url_key। तो यह $productचर के बिना संभव है । यह मुझे विश्वास दिलाता है कि पूरे उत्पाद को लोड किए बिना, उत्पाद की छवि प्राप्त करना और उसका आकार बदलना संभव है। (तो कोई फायदा नहीं Mage::getModel('catalog/product')->load($productId);)
सैंडर कोएडूड

2

मैं mpaepper की टिप्पणी के लिए कोड की 1 पंक्ति जोड़ना चाहता हूं, जो मुझे लगता है कि विशिष्ट परिदृश्य में एक महान समाधान है। मैंने इसका उपयोग एक पृष्ठ पर लूप में किया था, जहां उत्पाद मॉडल के माध्यम से छवि को लोड करने के लिए मेरे पास उत्पाद वस्तु नहीं थी।

जब आप किसी उत्पाद ऑब्जेक्ट के साथ एक छवि लोड नहीं करना चाहते हैं, तो आप दृष्टिकोण mpaepper exlpains का उपयोग कर सकते हैं। जब आप इस समाधान का उपयोग करते हैं तो मैन्युअल बनाई गई छवि को सहेजना न भूलें। जब आप इमेज ऑब्जेक्ट को सेव करते हैं तो यह कैशे फाइल बनाएगा, जैसे कि सामान्य मैगेंटो इमेज भी करते हैं।

तो पूर्ण कोड होना चाहिए:

$rc = Mage::getResourceModel('catalog/product'); //empty product model which you only have to load it once. (for the people who want to use this in a loop, put this Resource Model outside the loop.

$smallImage = $rc->getAttributeRawValue($productId, 'small_image', Mage::app()->getStore());
$imageModel = Mage::getModel('catalog/product_image');
$imageModel->setDestinationSubdir('small_image');
$imageModel->setBaseFile($smallImage);
$imageModel->saveFile(); //important line to create an cache file of the image
var_dump($imageModel->getUrl());

1

उत्पाद की छवि को निम्न तरीके से एक्सेस किया जा सकता है:

$this->helper('catalog/image')->init($_products, 'small_image');

छवि को आकार देने के लिए आप इसे जोड़ सकते हैं:

$this->helper('catalog/image')->init($_products, 'small_image')->resize(150,150);

उत्पाद url प्राप्त करने के लिए:

$_products->getProductUrl();

यहाँ $ _products उत्पाद ही है और उत्पाद आईडी नहीं है;


2
मेरे पास $_productsवैरिएबल की कोई पहुंच नहीं है , क्योंकि इससे मुझे उत्पाद को संपूर्णता में लोड करने की आवश्यकता होगी। और मेरे द्वारा पाले जाने वाले सभी उत्पादों को लोड करने के लिए सेकंड का लोड समय पैदा होगा, जो बहुत अधिक है।
सैंडर कोएडूड

आप उत्पाद लोड किए बिना उत्पाद डेटा क्यों नहीं प्राप्त करना चाहेंगे? आप सभी विशेषताओं को लोड करने के बजाय केवल उन विशेषताओं का चयन करने के लिए जो आप की आवश्यकता होती है विशेषता को जोड़ सकते हैं।
रोशन श्रेष्ठ

1
क्या आप मुझे दिखा सकते हैं कि आप उत्पाद url और छवि को कैसे प्राप्त करेंगे? एक संग्रह न मिलने का मेरा मुख्य उद्देश्य यह धारणा थी कि यह बहुत धीमा होगा।
Sander Koedood

मैं आमतौर पर उत्पाद को लोड करता हूं और यह कभी भी किसी भी तरह से धीमा महसूस नहीं करता है। मैं $ _products = Mage :: getModel ('कैटलॉग / उत्पाद') -> loadByAttribute ('sku', 'productsku');
Rojan Shrestha

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