পণ্যের ইউআরএল এবং চিত্র পাওয়ার দক্ষ উপায়


12

ম্যাজেন্টো ওয়েবশপটিতে সংযোজন করার সময়, আমি বেশ কয়েকটি সমস্যার জন্য হোঁচট খেয়েছি। যত দ্রুত সম্ভব কোড তৈরি করার জন্য আমার সন্ধানে আমি নিজেকে দুটি জিনিস বের করতে অক্ষম বলে মনে করি।

আমার (প্রাসঙ্গিক) কোডটি নিম্নলিখিত:

$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_keyসমস্ত ওয়েবশপগুলি ক্যানোনিকাল ইউআরএল ব্যবহার করে না বা ইউআরএলটিতে বিভাগ নেই বলে সর্বদা সঠিক ইউআরএল দেয় না।

2) পূর্ণ চিত্রের পরিবর্তে আমি কীভাবে একটি সেট প্রস্থ / উচ্চতা সহ পণ্যের চিত্র পেতে পারি? ->resize()ফাংশন এই ক্ষেত্রে আমি Recon কাজ না (যেহেতু এটি একটি 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। দেখে মনে হচ্ছে ছোট চিত্রগুলি সমস্তই আকার পরিবর্তন করেছে এবং এটি আকার পরিবর্তনশীল রূপটি নির্বাচন করে না। কীভাবে সমাধান করা যায় কোন ধারণা? এবং আপনার কাছে কী পণ্যটির ইউআরএল জন্য একটি সমাধান আছে?
Sander Koedood

@ স্যান্ডারকয়েডুড পুনরায় আকার দেওয়ার জন্য, $ চিত্রমোডেল-> সেটউইথ (150) -> সেটহাইট (150) -> পুনরায় আকার () -> getUrl () যোগ করুন;
এমপিএপার

150 এর পরিবর্তে, আপনার প্রয়োজনীয় মানগুলি অবশ্যই ব্যবহার করুন;)
এমপিএপার

আমার জ্ঞানটি এ পর্যন্ত ছড়িয়ে পড়ে ;-) তবে এটি নির্দেশ করার জন্য ধন্যবাদ thanks যাইহোক, এটি ভুল ফোল্ডারটি লোড করে সাইটের সমস্যা পরিবর্তন করে না। সুতরাং ছোট চিত্র ব্যবহার করার সময় কোনও চিত্র দেখায় না।
স্যান্ডার কোয়েদূদ

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
রত্ন

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

আপনি $ পণ্য / $ পণ্য পরিবর্তনশীল ছাড়া করতে পারবেন না:

পণ্য ইউআরএল জন্য:

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

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

// আপনি এই পদ্ধতিটি ইউআরএলটিতে ___ স্টোর যুক্ত করে থামাতে পারবেন না, এমনকি _ স্টোর_ টু_আরএলটিকে মিথ্যাতে সেট করেও

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

** // আপনি এই পদ্ধতিটি ইউআরএলটিতে ___ স্টোর যুক্ত করে থামাতে পারবেন না, এমনকি _store_to_url কে মিথ্যা // নোটে সেট করেও - এই পরমটি ব্যবহার করে তর্কযোগ্য বাগের জন্য নীচে "_ignore_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(); 

আপনি যদি চিত্রটিতে ইউআরএল ব্যবহার করতে চান তবে,

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

আমি এমপিএপারের মন্তব্যে কোডের 1 লাইন যুক্ত করতে চাই, যা আমি মনে করি নির্দিষ্ট দৃশ্যের একটি দুর্দান্ত সমাধান বিটিডব্লিউ। আমি এটি এমন একটি পৃষ্ঠায় একটি লুপে ব্যবহার করেছি যেখানে পণ্যের মডেলটির মাধ্যমে চিত্রটি লোড করার কোনও পণ্য অবজেক্ট আমার কাছে নেই।

আপনি যখন কোনও পণ্য সামগ্রীর সাহায্যে কোনও চিত্র লোড করতে চান না, আপনি এমপিএপার এক্সপেনপেনগুলি ব্যবহার করতে পারেন। আপনি যখন এই সমাধানটি ব্যবহার করেন তখন ম্যানুয়াল তৈরি চিত্রটি সংরক্ষণ করতে ভুলবেন না। আপনি যখন চিত্রের অবজেক্টটি সংরক্ষণ করেন এটি সাধারণ ম্যাজেন্টো চিত্রগুলির মতো একটি ক্যাশে ফাইল তৈরি করবে।

সুতরাং সম্পূর্ণ কোডটি হওয়া উচিত:

$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);

পণ্য ইউআরএল পেতে:

$_products->getProductUrl();

এখানে pr _ প্রোডাক্টস হ'ল পণ্য নিজেই এবং পণ্য আইডি নয়;


2
$_productsপরিবর্তনশীলটিতে আমার অ্যাক্সেস নেই , যেহেতু এটির পুরোপুরি আমার পণ্য লোড করা প্রয়োজন require এবং আমি লুপ করছি এমন সমস্ত পণ্য লোড করার জন্য সেকেন্ডের লোড টাইম তৈরি করবে, যা অনেক বেশি।
স্যান্ডার কোয়েদূদ

আপনি পণ্য লোড না করে কেন পণ্য ডেটা পেতে চান না? আপনি সমস্ত বৈশিষ্ট্যগুলি লোড না করে কেবলমাত্র প্রয়োজনীয় বৈশিষ্ট্যগুলি নির্বাচন করতে আপনি অ্যাট্রিবিউটটোসলেক্ট ফাংশন যুক্ত করতে পারেন।
রোজন শ্রেষ্ঠ

1
আপনি কি আমাকে দেখিয়ে দিতে পারেন যে আপনি কীভাবে তখন পণ্যের ইউআরএল এবং চিত্র পেয়ে যাবেন? সংগ্রহ না পাওয়ার জন্য আমার মূল উদ্দেশ্য এই ধারণাটি খুব ধীর হবে was
স্যান্ডার কোয়েদূদ

আমি সাধারণত পণ্যটি লোড করি এবং এটি কোনওভাবেই ধীরে ধীরে অনুভূত হয় নি। আমি $ _ প্রোডাক্টস = ম্যাজ :: গেটমোডেল ('ক্যাটালগ / পণ্য') -> লোডবাইএট্রিবিউট ('স্কু', 'প্রোডাক্টসু');
রোজন শ্রেষ্ঠ

তারপরে আমার উত্তরটি অনুসরণ করুন
রোজন শ্রেষ্ঠ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.