Magento 2: Ürün URL'sini yeniden yazın


15

Ben almaya çalışıyorum rewrite product urlgelen load productözel modülü. URL http://localhost/m2/catalog/product/view/id/1401/category/23/biçiminde alıyorum .

Ama istiyorum http://localhost/m2/juno-jacket.html

İşte kod

yapıcıda

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

Özel işlev

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

abc() method URL'yi geri döndür http://localhost/m2/catalog/product/view/id/1401/category/23/


dizinlerinizi yeniden oluşturun
— Marius

@Marius: Ben de yeniden inşa ediyorum. Ürün yeniden yazma URL'sini döndürmüyor.
— Zed Blackbeard

ürününüz herhangi bir web sitesiyle ilişkili mi?
— Marius

Ana web sitesinde ürün
— atadım

getProductUrl()giriş varsa yeniden yazılmış URL'yi döndürmesi gerekir url_rewrite. Bu tablodan kayıtları manuel olarak sildiniz mi?
— musicliftsme

Yanıtlar:


4

İşte ürün url'sini almak için kullandığım yöntem.

Performans açısından çok kötü olması için tüm ürünü yüklemem gerektiğinden kesinlikle uygun değil.

İlk önce yapıcıya bir enjekte etmeniz gerekir Magento\Catalog\Model\ProductRepository:

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

Ardından ürünü ürün kimliğine göre yüklersiniz:

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

Son olarak, yeniden yazılan URL'yi almak için URL modelini alabilirsiniz:

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

Sondaki çift virgül amaçlanmamıştır, değil mi?
— Max

@Max evet tamamen, kaldırdım
— Raphael at Digital Pianism

5
Ben aynı karşı karşıya ve kodunu denedim ama hala urls benim için yanlış. Tavsiye lütfen.
— Anshu Mishra

Başka bir yol (ve daha az mükemmel katil), ürün toplama yüküne URL yeniden yazma işlemlerinin eklenmesini zorlamak olabilir. Cevabımı gör.
— Hervé Guétin

Aynı hatayı lütfen bana bu kodu nereye koyabileceğimi söyler misiniz?
— Rahul Katoch

3

Bu soruya gerçekten cevap vermeyebilir, ancak URL yeniden yazma işlemini kaçırırsanız ürününüzü bir ürün koleksiyonundan çıkarıyor olabilirsiniz. URL yeniden yazma bilgileri eklemek, gördüğünüz gibi otomatik değildir \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite.

URL yeniden yazma işlemlerinin eklenmesini zorunlu kılmanın yolu, create()yönteminde bir eklenti oluşturmaktır \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory. Ve en kısa kodunuzda (veya Magento'nın çekirdek kodu) gibi bir ürün koleksiyonu instanciating için bu fabrikayı kullanmaktadır (ve olması gerektiği gibi en iyi uygulamaların), bu eklenti kuvvetleri \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewriteiçin true.

Ardından, ürünlerin URL yeniden yazma işlemleri, ürünlerde döngü oluşturmaya ve yeniden yüklemeye gerek kalmadan ürünlere başarıyla eklenir. Böylece @ Raphael'in bahsettiği mükemmel dezavantajı giderir.

Eklenti XML tanımı ( di.xmldosyanızda):

<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>

Ve eklenti kodu:

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;
    }
}

Bu şekilde denedim, ancak eklenti sınıfı yürütülmüyor. Neden biliyor musun?
— Deeps

0

Ürünlerinizi bir csv dosyasına aktarın

Excel'deki csv dosyasından url_key sütunu için bu formülü kullanın

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

burada "P103" url_key sütunu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.