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.