ম্যাজেন্টো 2: পণ্যের url পুনর্লিখন পান


15

আমি কাস্টম মডিউল rewrite product urlথেকে পেতে চেষ্টা করছি load product। আমি http://localhost/m2/catalog/product/view/id/1401/category/23/ফর্ম্যাটে url পাচ্ছি ।

কিন্তু আমি চাই http://localhost/m2/juno-jacket.html

কোডটি এখানে

কনস্ট্রাক্টর

public function __construct(
    \Magento\Catalog\Helper\Product $catalogProductHelper,
) {
    $this->catalogProductHelper = $catalogProductHelper;
}

কাস্টম ফাংশন

public function abc(){
    $product_id = '123';
    return  $this->catalogProductHelper->getProductUrl($product_id);
}

abc() method ইউআরএল রিটার্ন করুন http://localhost/m2/catalog/product/view/id/1401/category/23/


আপনার সূচিগুলি পুনর্নির্মাণ করুন
মারিয়াস

@ মারিয়াস: আমিও পুনর্নির্মাণ করেছি। এটি পণ্য পুনর্লিখনের url ফিরিয়ে দিচ্ছে না।
জেড ব্ল্যাকবের্ড

আপনার পণ্য কোন ওয়েবসাইটের সাথে যুক্ত?
মারিয়াস

আমি মূল ওয়েবসাইটে প্রোডাক্ট নিযুক্ত করেছি
জেড ব্ল্যাকবার্ড

getProductUrl()তাহলে এন্ট্রি বিদ্যমান পুনর্লিখিত URL টি আসতে অনুমিত হয় url_rewrite। আপনি কি এই টেবিল থেকে ম্যানুয়ালি রেকর্ড মুছে ফেলেছেন?
সঙ্গীতলিফ্সমে

উত্তর:


4

আমি পণ্যের ইউআরএল পেতে যে পদ্ধতিটি ব্যবহার করেছি তা এখানে।

পারফরম্যান্সের দিক থেকে এটি খুব খারাপ পেতে পুরো পণ্যটি লোড করতে হয় বলে এটি অবশ্যই যথাযথ নয়।

প্রথমে আপনাকে Magento\Catalog\Model\ProductRepositoryআপনার কন্সট্রাক্টরে একটি ইনজেকশন দেওয়া দরকার :

use Magento\Catalog\Model\ProductRepository;
//...
public function __construct(
    ProductRepository $productRepository
) {
    $this->_productRepository = $productRepository;
}

তারপরে আপনি পণ্যের আইডির উপর ভিত্তি করে পণ্যটি লোড করুন:

$product = $this->_productRepository->getById($productId);

অবশেষে আপনি লিখিত URL টি পুনরুদ্ধার করতে URL মডেলটি পেতে পারেন:

return $product->getUrlModel()->getUrl($product);

শেষে ডাবল কমা উদ্দেশ্য নয়, তাই না?
সর্বোচ্চ

@ ম্যাক্স হ্যাঁ পুরোপুরি, আমি এটিকে সরিয়ে দিয়েছি

5
আমিও এর মুখোমুখি হয়েছি এবং আমি আপনার কোড চেষ্টা করেছি তবে এখনও আমার কাছে ইউআরএলগুলি ভুল। দয়া করে উপদেশ দাও.
আনশু মিশ্র

আর একটি উপায় (এবং কম পারফ-কিলার) হতে পারে পণ্য সংগ্রহের লোডে ইউআরএল পুনর্লিখনগুলি যুক্ত করার জন্য বাধ্য করা। আমার উত্তর দেখুন।
হারভে গুটিন

একই ত্রুটি আপনি দয়া করে বলতে পারেন আমি এই কোডটি কোথায় রাখতে পারি?
রাহুল কাটোচ

3

এটি সত্যিই প্রশ্নের উত্তর নাও দিতে পারে তবে সম্ভাবনাগুলি হ'ল, আপনি যদি ইউআরএল পুনর্লিখনটি মিস করেন তবে আপনি আপনার পণ্যটি কোনও পণ্য সংগ্রহের বাইরে নিয়ে যেতে পারেন। এবং ইউআরএল পুনর্লিখন তথ্য যুক্ত করা আপনি দেখতে পারেন হিসাবে স্বয়ংক্রিয় হয় না \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite

ইউআরএল পুনর্লিখনের জন্য আমি যেভাবে জোর করে পরিচালনা করেছি তা হল এর create()পদ্ধতিতে একটি প্লাগইন তৈরি করা \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory। এবং যত তাড়াতাড়ি আপনার কোড (অথবা Magento কোর কোড) হিসাবে (এবং এটি করা উচিত সর্বোত্তম কার্যাভ্যাস হিসাবে) এই প্লাগিন বাহিনীর একটি পণ্য সংগ্রহ instanciating এই কারখানা ব্যবহার \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewriteকরার true

তারপরে, পণ্যগুলির ইউআরএল পুনর্লিখনগুলি সফলভাবে পণ্যগুলিতে সেগুলিতে লুপ না করে এবং তাদের পুনরায় লোড করার পরে যুক্ত করা হয়। এটি @ রাফেল যে কথা বলেছিল সেই পারফেক্টটিকে সংশোধন করে।

এখানে প্লাগইন এক্সএমএল সংজ্ঞা (আপনার di.xmlফাইলে) রয়েছে:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Catalog\Model\ResourceModel\Product\CollectionFactory">
        <plugin name="your_plugin_unique_nane" type="Your\Plugin\Namespace\Plugin" />
    </type>
</config>

এবং প্লাগইন কোড:

namespace Your\Plugin\Namespace;

use Magento\Catalog\Model\ResourceModel\Product\Collection;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as CoreCollectionFactory;

class Plugin
{
    /**
     * @param CoreCollectionFactory $subject
     * @param Collection $collection
     * @return Collection
     */
    public function afterCreate(CoreCollectionFactory $subject, Collection $collection)
    {
        $collection->addUrlRewrite();

        return $collection;
    }
}

আমি এইভাবে চেষ্টা করেছি, তবে প্লাগইন ক্লাসটি কার্যকর হচ্ছে না। তুমি কি জানো কেন?
গভীরতা

0

আপনার পণ্যগুলি একটি সিএসভি ফাইলে রফতানি করুন

এক্সেলের সিএসভি ফাইল থেকে url_key কলামের জন্য এই সূত্রটি ব্যবহার করুন

= "Https://www.yourdomain.com/" & P103 & ".html"

যেখানে "P103" হল url_key কলাম

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