আমি কীভাবে বর্তমান পণ্যটি ম্যাজেন্টো 2 এ পাব?


15

আমি ম্যাজেন্টো ২ এর একটি ব্লকে বর্তমান পণ্যের গুণাবলী পুনরুদ্ধার করার চেষ্টা করছি আমি আইডি 1 এর মতো একটি পণ্য পেতে পারি:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->create('\Magento\Catalog\Model\ProductRepository')->getById(1);

যদিও বর্তমান পণ্যের আইডি পাবেন তা আমি জানি না get আমি কেমন করে ঐটি করি?


তোমার দর্শন লগ করা ফাংশন কল করতে পারেন getProduct()মধ্যেMagento\Catalog\Block\Product\View
xanka

আপনি বর্তমান পণ্য পেতে চান?
অমিত বেড়া

আমি পণ্যের পৃষ্ঠার একটি ট্যাবে পণ্যের স্পেসিফিকেশন (বৈশিষ্ট্য) দেখানোর জন্য একটি মডিউল যুক্ত করছি। রহিল প্যাটেলের উত্তর অনুসারে $ block-> getPr Prodct () এর মাধ্যমে সমস্যার সমাধান।
টিম ট্র্যাম্পেডাচ

দয়া করে নীচের লিঙ্কগুলি mageplaza.com/how-get-current-product-category-magento-2.html চেক করুন আপনি রেজিস্ট্রি ব্যবহার করে বর্তমান পণ্য পেতে পারেন। ধন্যবাদ !!
মুকেশ প্রজাপতি

যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত পৃষ্ঠাগুলি পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তরগুলি অবৈধ হতে পারে। - পর্যালোচনা থেকে
জয়

উত্তর:


11

বর্তমান পণ্য পেতে, প্রস্তাবিত উপায়গুলির মধ্যে একটি:

  1. প্রসারিত বা ব্যবহারের ব্লক শ্রেণী: Magento\Catalog\Block\Product\View\AbstractView
  2. $block->getProduct()আপনার পিএইচটিএমএল ফাইলে ব্যবহার করে পণ্য পান ।

6
অথবা আপনি এটি ব্যবহার করতে পারেন - এটি -> _ কোরআরজিস্ট্রি-> রেজিস্ট্রি ('পণ্য'); যেমন!!
রাহিল প্যাটেল

# 2 খুব ভাল কাজ করে। আমি কেন নিজেকে বুঝতে পারছিলাম না তা নিশ্চিত নয়। আপনার সাহায্যের জন্য ধন্যবাদ!
টিম ট্র্যাম্পেডাচ

প্রোডাক্ট আইডি $ অবজেক্টম্যানেজার = \ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ অ্যাপ \ অবজেক্টম্যানেজার :: getInstance () পেতে আমি লোডে () ত্রুটি পেতে সহায়তা করতে পারি? $ কারেন্টপ্রডাক্ট = $ অবজেক্ট ম্যানেজার-> তৈরি করুন ('বিক্রেতা \ মডিউল \ মডেল \ সারি') -> লোড ($ productId);
সুশীবম

@ সচিনস দয়া করে আরও বিশদ সরবরাহ করুন যাতে আমি আপনাকে সহায়তা করতে পারি।
রহিল প্যাটেল

2
অ্যাবস্ট্রাকভিউ মূলধন দিয়ে শুরু হয় এ ম্যাগন্টো \ ক্যাটালগ \ ব্লক \ পণ্য \ দেখুন \ অ্যাবস্ট্রাকভিউ
প্যাট্রিক ভ্যান বার্গেন

29

যদিও অন্যান্য উত্তরগুলি সঠিক, সেগুলিও প্রস্তাবিত / যথাযথ সমাধান নয়।

ম্যাজেন্টো ২-তে অবজেক্টম্যানেজারটি ব্যবহার করা সম্পূর্ণভাবে নিষিদ্ধ So সুতরাং দয়া করে এই সমাধানের উপর নির্ভর করবেন না, পরিবর্তে এটি অর্জনের জন্য যথাযথ ডিআই ব্যবহার করুন। : Magento 2 দ্বি কীভাবে ব্যবহার করবেন তা জানতে, এই সম্পদ দেখতে http://devdocs.magento.com/guides/v2.0/extension-dev-guide/depend-inj.html

অ্যাবস্ট্রাকভিউ প্রসারিত করার প্রয়োজন নেই। আপনি যদি অ্যাবস্ট্রাকভিউতে মূল ফাংশনটি দেখে থাকেন তবে দেখতে পাবেন পণ্যটি আনতে ম্যাজেন্টো রেজিস্ট্রি ব্যবহার করেছিল। এটি করার জন্য আপনার নির্দিষ্ট শ্রেণি বাড়াতে হবে না, কেবল আপনার নির্মাণকারীর মধ্যে ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ রেজিস্ট্রি ইনজেক্ট করুন এবং "পণ্য" রেজিস্ট্রি আইটেমটির জন্য অনুরোধ করুন।

সম্পূর্ণ কোড উদাহরণ:

<?php

// Example = Module namespace, Module = module name, rest of the namespace is just for example only, change this to whatever it is in your case.
namespace Example\Module\Block\Frontend\Catalog\Product\General;

use Magento\Catalog\Model\Product;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Registry;
use Magento\Framework\View\Element\Template;

class Information extends Template
{

    /**
     * @var Registry
     */
    protected $registry;

    /**
     * @var Product
     */
    private $product;

    public function __construct(Template\Context $context,
                                Registry $registry,
                                array $data)
    {
        $this->registry = $registry;

        parent::__construct($context, $data);
    }


    /**
     * @return Product
     */
    private function getProduct()
    {
        if (is_null($this->product)) {
            $this->product = $this->registry->registry('product');

            if (!$this->product->getId()) {
                throw new LocalizedException(__('Failed to initialize product'));
            }
        }

        return $this->product;
    }

    public function getProductName()
    {
        return $this->getProduct()->getName();
    }

}

Magento এসই স্বাগত জানাই। অন্যান্য উত্তরের বিষয়ে আপনার যদি মন্তব্য থাকে তবে দয়া করে এটি করতে "একটি মন্তব্য যুক্ত করুন" লিঙ্কটি ব্যবহার করুন। দয়া করে একটি উত্তর লিখুন যা এটি যথাসম্ভব নিজের উপর দাঁড়িয়ে থাকে এবং অন্যান্য উত্তরের উপর নির্ভর করে না। অন্যান্য উত্তরগুলি মুছে ফেলা হতে পারে বা পৃষ্ঠার নীচের অঞ্চলে "অদৃশ্য হয়ে যেতে" পারে।
ওচেম

@ 7 ওচাম ক্ষমাপ্রার্থী, এটি বলেছে যে আমাকে এখনও মন্তব্য করার অনুমতি দেওয়া হয়নি, সে কারণেই আমি এটি এরকম করেছিলাম, ভবিষ্যতে আমি সঠিক মন্তব্য ব্যবহার করব। :)
ওয়েসলি ভেস্টজেনস

আমার ইতিমধ্যে মডিউল রয়েছে এবং আপনি দয়া করে আমার বর্তমান মডিউলটিতে আপনার ফাংশনটি কীভাবে ব্যবহার করবেন গাইড করতে পারেন? এবং আমি বলব, আপনার ব্যাখ্যাটি আমার মডিউলে কার্যকর হওয়া সবচেয়ে ভাল। ধন্যবাদ
শর্মা

হাই শর্মা, কোডটি না দেখে সঠিকভাবে বলা শক্ত, তবে ধারণাটি একই রয়ে গেছে: আপনার কনস্ট্রাক্টরে (২ টি আন্ডারস্কোর সমেত), একটি নতুন যুক্তি যুক্ত করুন এবং আপনার ব্লকে Magento \ ফ্রেমওয়ার্ক \ রেজিস্ট্রি ইনজেক্ট করুন। তারপরে, এই জাতীয় পণ্য পেতে রেজিস্ট্রিটি ব্যবহার করুন: $ এই-> পণ্য = $ এটি-> রেজিস্ট্রি-> রেজিস্ট্রি ('পণ্য');
ওয়েসলি ভেস্টজেন্স

2
রেজিস্ট্রি হ্রাস করা হয়েছে এবং পরিবর্তে @ রাফেল-কর্রিয়া-গোমসের পদ্ধতিটি ব্যবহার করতে হবে।
ক্রিস্টোফ ফেরেবুয়েফ

5

আপনি যদি ম্যাজেন্টো ২.১ বা বড় ব্যবহার করছেন তবে আপনি এটি ব্যবহার করতে পারেন helperকারণ পুরানো পদ্ধতিটি অবহেলা করা হয়েছিল।

...
use Magento\Catalog\Helper\Data;
...

public function __construct(
        Context $context,
        Data $helper,
        array $data = []
    ){
        $this->context = $context;
        $this->helper = $helper;
        $this->data = $data;
        parent::__construct($context, $data);
    }

...

public function getProduct(){
    if(is_null($this->_product)){
        $this->_product = $this->helper->getProduct();
    }
    return $this->_product;
}

0

@ ওয়েসলি ভেস্টজেন্স সলিউশন আমার পক্ষেও কাজ করেছে। কেবল অ্যাক্সেস মডিফায়ারের দিকে মনোযোগ দেওয়ার বিষয়টি নিশ্চিত করুন, কারণ আপনি যদি getProduct()আপনার টেম্পলেটটিতে ব্যবহার করছেন তবে ব্যক্তিগতভাবে আপনি যা চান তা হতে পারে না । উপরের উদাহরণে এটি getProductName()ব্যবহারের সরকারী পদ্ধতি হিসাবে কাজ করে।


সাধারণত কোনও টেমপ্লেটকে পুরো অবজেক্ট না দেওয়ার জন্য সুপারিশ করা হয়, তবে পরিবর্তে এর জন্য প্রয়োজনীয় ডেটা এবং আরও কিছু না পাস করুন। এজন্যই getProduct()ব্যক্তিগত এবং getProductName()সর্বজনীন। আরও নতুন ম্যাজেন্টো সংস্করণগুলিতে (২.২ / ২.৩ এবং তারপরে) এই পদ্ধতিগুলিকে অবচয় হিসাবে বিবেচনা করা হয় এবং পরিবর্তে মডেলগুলিও ব্যবহার করা উচিত।
ওয়েসলে ভেস্টজেন্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.