কোনও পণ্য সংগ্রহে মিডিয়া চিত্রগুলি লোড করার দ্রুত উপায়


23

টিএল; ডিআর : পুরো পণ্য লোড না করে কীভাবে আমি পণ্যের চিত্র / গ্যালারী লোড করব?

আমি কোনও পণ্যগুলিতে ছবিগুলি লোড করতে চাই। আমি। PhtML এ কি করি

$_popularCollection = $this->getPopularCollection();
foreach ($_popularCollection as $_product):
    // the rest
    $mediaGallery = $_product->getMediaGalleryImages();
endforeach;
//the rest

আমি ব্লক শ্রেণিতে যা করি:

public function getPopularCollection() {
    // http://magento.stackexchange.com/q/5838/3089

    // no category
    if ( is_null( $this->getCategoryId() ) )
        return false;

    /** @var Mage_Catalog_Model_Category $category */
    $category = Mage::getModel('catalog/category')->load( (int)$this->getCategoryId() );

    /** @var Mage_Catalog_Model_Resource_Product_Collection $_popularCollection */
    $_popularCollection = Mage::getModel('catalog/product')->getResourceCollection();
    $_popularCollection->addAttributeToSelect('*');
    $_popularCollection->setStoreId(Mage::app()->getStore()->getId());
    $_popularCollection->addCategoryFilter($category);

    return $_popularCollection;
}

এটি কাজ করে তবে আমি সবকিছু লোড করি: $_popularCollection->addAttributeToSelect(*);

আমি চেষ্টা করেছি $_popularCollection->addAttributeToSelect('media_gallery'); কিন্তু মনে হচ্ছে এটি কাজ করে না।

উত্তর:


22

addAttributeToSelect('media_gallery') মিডিয়া_গ্যালারি জটিল যুক্তি থেকে আসবে বলে কাজ করছে না।

সম্পূর্ণ পণ্যের মডেলটি লোড করে আপনি লুপের ভিতরে সহজেই media_galleryডেটা পেতে পারেন তবে এক্ষেত্রে এটি অনেক বেশি স্মৃতি গ্রহণ করবে।

media_galleryবৈশিষ্ট্য এবং afterloadপণ্য মডেলের ব্যাকএন্ড মডেল ব্যবহার করুন

সম্পূর্ণ পণ্যের লোড ছাড়াইmedia_gallery অ্যাট্রিবিউট মান পাওয়ার জন্য (Mage :: getModel ('ক্যাটালগ / পণ্য')) -> লোড ($ প্রোডাক্টআইডি)

আপনি ব্যবহার করতে পারেন afterLoad(), এই ফাংশন কল ব্যবহার backend modelএর media_gallery eav attributeলোড মিডিয়া চিত্র। এটি পুরো মডেলের চেয়ে অনেক দ্রুত isload(Mage::getModel('ctalog/product')->load($ProductID))

foreach($his->getPopularCollection() as $product){
    $attributes = $product->getTypeInstance(true)->getSetAttributes($product);
    $media_gallery = $attributes['media_gallery'];
    $backend = $media_gallery->getBackend();
    $backend->afterLoad($product); 
    $mediaGallery = $product->getMediaGalleryImages();
        /* get Image one by  using loop*/
        foreach ($product->getMediaGalleryImages() as $image) {
        echo ($image->getUrl());
        }     

echo "<br/>..........................................<br/>";


}

1
হ্যাঁ যে কাজ
janw

চমৎকার! এটি কাজ করেছিল
জিতেন্দ্র ম্যান্ডলুই

15

গৃহীত উত্তরটি কাজ করে, তবে সমস্ত পণ্য বৈশিষ্ট্য মেমরিতে লোড করা জড়িত যখন সম্ভবত তারা অপ্রয়োজনীয় হয়।

কিছুটা আরও শল্য চিকিত্সা গ্রহণের জন্য (১.৯.২.২ খ্রিস্টাব্দে পরীক্ষিত) করুন

$attributeCode = 'media_gallery';
$attribute = $product->getResource()->getAttribute($attributeCode);
$backend = $attribute->getBackend();
$backend->afterLoad($product);

এইভাবে আপনি কেবল মিডিয়া_গ্যালারি বৈশিষ্ট্যটি লোড করুন।


এটি গৃহীত উত্তরের চেয়ে অনেক ভাল সমাধান
সেস্ট্রো

5

আমি জানি প্রশ্নটি পুরানো এবং এর ইতিমধ্যে সঠিক উত্তর রয়েছে তবে সম্প্রদায়ের পক্ষে উপকারী হতে পারে এমন অন্য কোনও পদ্ধতির সুপারিশ করা খারাপ নয়: আগে $_product->getMediaGalleryImages()

আপনি চেষ্টা করতে পারেন:

$_product->load('media_gallery');//load media gallery attributes
$mediaGallery = $_product->getMediaGalleryImages();

থেকে নেওয়া: /programming/7890616/get-product-media-gallery-images-from-a-product-col લેક્-in-magento#23804663


1
ভাল লাগছে! তবে, আমাকে অবশ্যই উল্লেখ করতে হবে যে উপরে + অ্যামিট-বেরা দ্বারা বর্ণিত সমাধানটি উল্লেখযোগ্যভাবে দ্রুত এবং কম মেমরি এবং ডাটাবেস নিবিড়। [সম্পাদনা করুন: + অ্যারন-বোনার দ্বারা প্রবেশাধিকারটি আসলে আরও দ্রুত]]
টাইলার ভি।

না এটি একটি খারাপ উত্তর। আপনি কোনও পণ্যের উপর নির্দিষ্ট ডেটা লোড করতে পারবেন না, এটি কেবলমাত্র পণ্যটিতে লোড () এবং পরে লোড () এর আগে কল করে এবং মডেলটিতে ইতিমধ্যে বিদ্যমান ডেটা পরিবর্তন করে না কারণ ডাটাবেস কলটি এই ফাংশন থেকে কোনও কিছুই ফিরিয়ে দেবে না because । Mage_Core_Model_Abstract এবং Mage_Core_Model_Resource_Db_Abstract এ লোড () ফাংশন সংজ্ঞাটি দেখুন। আপনি এখানে যা করছেন তা হ'ল পণ্যটির প্রায় সম্পূর্ণ বোঝা।
ওডব্রু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.