Magento 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 url पसंद करें http://localhost/m2/catalog/product/view/id/1401/category/23/


अपने अनुक्रमित के पुनर्निर्माण
मेरियस

@ मेरी: मैं भी पुनर्निर्माण किया है। यह उत्पाद को फिर से लिखना नहीं है url।
जेड ब्लैकबियर

क्या आपका उत्पाद किसी वेबसाइट से जुड़ा है?
मेरियस

मैंने मुख्य वेबसाइट
zed Blackbeard

getProductUrl()यदि प्रविष्टि मौजूद है तो पुनर्लेखन URL वापस करना चाहिए url_rewrite। क्या आपने मैन्युअल रूप से इस तालिका से रिकॉर्ड हटा दिए थे?
म्यूजिकलिफ्टमे

जवाबों:


4

यहाँ वह विधि है जिसका उपयोग मैंने उत्पाद url प्राप्त करने के लिए किया था।

यह निश्चित रूप से इष्टतम नहीं है क्योंकि मुझे प्रदर्शन के मामले में बहुत खराब होने के लिए पूरे उत्पाद को लोड करना होगा।

सबसे पहले आपको 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
मैं उसी का सामना कर रहा हूं और मैंने आपके कोड की कोशिश की है लेकिन फिर भी मेरे लिए यूआरएल गलत हैं। कृपया सलाह दें।
अंशु मिश्रा

एक अन्य तरीका (और कम परफ़ॉर्मर) उत्पाद संग्रह लोड पर URL पुनर्लेखन को जोड़ने के लिए बाध्य कर सकता है। मेरा जवाब देखिए।
हर्वे गुएटिन

वही त्रुटि आप मुझे बता सकते हैं कि मैं यह कोड कहां रख सकता हूं?
राहुल कटोच

3

यह वास्तव में सवाल का जवाब नहीं दे सकता है लेकिन संभावना है कि, यदि आप URL को फिर से लिख रहे हैं, तो आप अपने उत्पाद को उत्पाद संग्रह से निकाल सकते हैं। और URL rewrite जानकारी जोड़ना स्वचालित नहीं है जैसा कि आप देख सकते हैं\Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite

जिस तरह से मैंने URL रीराइट करने के लिए मजबूर किया है वह create()विधि के तरीके पर एक प्लगइन बनाकर है \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory। और जैसे ही आपका कोड (या मैगेंटो का कोर कोड) इस कारखाने का उपयोग उत्पाद संग्रह (और यह सर्वोत्तम प्रथाओं के रूप में करना चाहिए) के लिए करता है, यह प्लगइन बल देता \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewriteहैtrue

फिर, उन उत्पादों के URL रीराइट को सफलतापूर्वक उन पर लूप की आवश्यकता के बिना उत्पादों में जोड़ा जाता है और उन्हें फिर से लोड किया जाता है। यह इस प्रकार उस नकारात्मक पहलू को ठीक करता है जिसके बारे में @ राफेल ने बात की थी।

यहाँ प्लगइन XML परिभाषा (आपकी 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

अपने उत्पादों को एक सीएसवी फ़ाइल में निर्यात करें

Excel में csv फ़ाइल से url_key कॉलम के लिए इस सूत्र का उपयोग करें

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

जहाँ "P103" url_key कॉलम है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.