দক্ষ আইডি থেকে পণ্য url পান


27

কেবলমাত্র একটি আইডি দেওয়া পণ্যের ইউআরএল পাওয়ার সবচেয়ে কার্যকর উপায় কী? আমাদের কোডে কয়েকটি জায়গায় আমাদের কাছে এমন জিনিস রয়েছে যেমন Mage::getModel('catalog/product')->load($id)->getProductUrl()পণ্যটির ইউআরএল পেতে কোনও পণ্যের সাথে সম্পর্কিত ইভেন্টগুলি ইত্যাদির পরিপ্রেক্ষিতে এটি অপব্যয়যুক্ত বলে মনে হয়, এর চেয়ে সহজ পদ্ধতি কি আছে? একটি বিভাগ আইডি নির্দিষ্ট করার ক্ষমতাটি দুর্দান্ত হবে।

অতিরিক্তভাবে, নামের মতো কোনও পণ্যের জন্য একটি একক বৈশিষ্ট্যের জন্য একই জিনিস করার কোনও কার্যকর পদ্ধতি আছে কি?


1
আপনার প্রশ্ন এখানে সমাধান হয়েছে? এই প্রশ্নে আপনার আরও সাহায্যের দরকার ছিল? যদি তা হয় তবে আপনাকে সমাধান সন্ধানে সহায়তা করার জন্য কী করা উচিত তা আমাদের জানান।
ফিলিউঙ্কল

উত্তর:


47

পুরো পণ্য লোড না করে আমরা পণ্যের URL পেতে পারি কিনা তা জানতে আগ্রহী। আপনার অতিরিক্ত প্রশ্নের উত্তর দেওয়ার জন্য দুঃখিত এবং মূল প্রশ্নের নয়, কারণ আমিও নিশ্চিত নই যে আমরা এটি পেতে পারি কিনা :)

পুরো পণ্য লোড না করে একক অ্যাট্রিবিউট পাওয়ার জন্য, আপনি getAttributeRawValue()যদি ম্যাজেন্টো সিই সংস্করণ 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পরিবর্তে কল করে আপনি একটি বিদ্যমান ক্যাটালগ / পণ্য সংস্থান মডেলটিকে পুনরায় ব্যবহার করতে পারেন (নতুনকে ইনস্ট্যান্ট করার পরিবর্তে) কল করে। I স্টোরআইডি কোনও আইডি হতে হবে না, এটি একটি Mage_Core_Model_Storeবস্তুও হতে পারে , যাতে আপনি Mage::app()->getStore()গতি বাড়ানোর জন্য ইনলাইনটি ব্যবহার করতে পারেন ।
ফিলিউঙ্কল

এবং আপনি এটি একাধিক বৈশিষ্ট্য আনতে ব্যবহার করতে পারেন: @ পরিমাপ | স্ট্রিং | অ্যারে $ অ্যাট্রিবিউট এর আইডি বা কোডগুলি (1.7 এ)
রিচার্ড

আমি এই পদ্ধতির পছন্দ, খুব ঝরঝরে। আমি ভোট দিয়েছি যদি কেউ ইউআরএলটির উত্তর না নিয়ে আসে তবে আমি গ্রহণ করব।
পিটার ও'ক্যালাহান

এটি কি এখনও কোনও পণ্য আইডি ছাড়া ব্যবহার করা যেতে পারে? আমার যদি কেবল একটি এসকিউ থাকে তবে আমি কি মডেলটি লোড করতে বাধ্য হই?
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 বিভাগটি ধারণ করে না।

আপনি এখনও কলটি getProductUrl()শেষ করছেন যা ব্যবহার করে শেষ হয় Mage_Catalog_Model_Product_Url, তবে এটির জন্য কেবল আইডি, অনুরোধ_পথ এবং ইউআরএল কী প্রয়োজন তাই এটি সম্পূর্ণ পণ্য ছাড়াই কাজ করা উচিত।


এটি ভাল কাজ করে!
মুকেশ চাঁপাগাইন

দেখে মনে হবে যে $ পণ্য-> getProductUrl () আপনার প্রয়োজনীয় সমস্ত হওয়া উচিত। "AddUrlRewrite ()" সংযোজন পার্থক্য তৈরি করে - উদাহরণটি সরবরাহ করার জন্য ধন্যবাদ।
jschrab

4

আমি অনুমান করি যে পণ্যগুলির পুনর্লিখনের 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

    • মোট Incl। ওয়াল সময় (মাইক্রোসেকস): 8,323 মাইক্রোসেকস
    • মোট Incl। সিপিইউ (মাইক্রোস্যাকস): 8,038 মাইক্রোসেকস
    • মোট Incl। মেমুউজ (বাইটস): 273,872 বাইট
    • মোট Incl। পিকমেমউস (বাইটস): 213,488 বাইট
    • ফাংশন কলগুলির সংখ্যা: 372
  2. getAttributeRawValue

    • মোট Incl। ওয়াল সময় (মাইক্রোসেকস): 51,213 মাইক্রোসেকস
    • মোট Incl। সিপিইউ (মাইক্রোস্যাকস): 50,390 মাইক্রোস্যাকস
    • মোট Incl। মেমুউজ (বাইটস): 1,223,520 বাইট
    • মোট Incl। পিকমেমউস (বাইটস): 1,168,496 বাইট
    • ফাংশন কলগুলির সংখ্যা: 2,233 3
  3. load(productId)

    • মোট Incl। ওয়াল টাইম (মাইক্রোসেকস): 605,649 মাইক্রোস্যাকস
    • মোট Incl। সিপিইউ (মাইক্রোস্যাকস): 598,820 মাইক্রোস্যাকস
    • মোট Incl। মেমুউজ (বাইটস): 5,370,848 বাইট
    • মোট Incl। পিকমেমউস (বাইটস): 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 টি বিভাগে বিভাগটি ব্যবহার করে তবে এটি কাজ করবে না, যেহেতু সেই অংশটি দেখানো হয়নি। আমি যে দোকানটিতে কাজ করছিলাম সে ক্ষেত্রে এটি ছিল।

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