Magento 2: รับเขียน url ผลิตภัณฑ์ใหม่


15

ฉันพยายามรับrewrite product urlจากload productโมดูลที่กำหนดเอง ฉันกำลังรับ URL ในhttp://localhost/m2/catalog/product/view/id/1401/category/23/รูปแบบ

แต่ฉันต้องการ 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/


สร้างดัชนีของคุณใหม่
Marius

@Marius: ฉันได้สร้างใหม่ด้วย จะไม่ส่งคืน url ของผลิตภัณฑ์ที่เขียนซ้ำ
zed Blackbeard

ผลิตภัณฑ์ของคุณเชื่อมโยงกับเว็บไซต์ใด ๆ
Marius

ฉันได้มอบหมายผลิตภัณฑ์ในเว็บไซต์หลัก
zed Blackbeard

getProductUrl()ควรจะกลับ URL url_rewriteเขียนใหม่ถ้ามีอยู่ในรายการ คุณลบระเบียนออกจากตารางนี้ด้วยตนเองหรือไม่
musicliftsme

คำตอบ:


4

นี่คือวิธีที่ฉันใช้เพื่อรับ URL ผลิตภัณฑ์

แน่นอนว่ามันไม่เหมาะสมเพราะฉันต้องโหลดผลิตภัณฑ์ทั้งหมดเพื่อให้ได้ประสิทธิภาพที่แย่มาก

ก่อนอื่นคุณต้องฉีด a 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);

เครื่องหมายจุลภาคคู่ท้ายไม่ได้มีไว้ใช่ไหม
สูงสุด

@ Max ใช่เลยฉันลบมัน
Raphael ที่ Digital Pianism

5
ฉันหันหน้าไปทางเดียวกันและฉันได้ลองใช้รหัสของคุณแล้ว แต่ URL ยังไม่ถูกต้องสำหรับฉัน กรุณาแนะนำ
Anshu Mishra

อีกวิธีหนึ่ง (และน้อยกว่า perf-killer) อาจเป็นการบังคับให้เพิ่มการเขียน URL ซ้ำในการโหลดชุดผลิตภัณฑ์ ดูคำตอบของฉัน
HervéGuétin

มีข้อผิดพลาดเดียวกันโปรดบอกฉันว่าฉันสามารถใส่รหัสนี้ได้ที่ไหน
ราหุล Katoch

3

นี่อาจไม่ตอบคำถามจริงๆ แต่มีโอกาสที่ถ้าคุณพลาดการเขียน URL ซ้ำคุณอาจนำผลิตภัณฑ์ของคุณออกจากกลุ่มผลิตภัณฑ์ และการเพิ่มข้อมูล URL \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewriteที่เขียนไม่ได้โดยอัตโนมัติในขณะที่คุณสามารถดูได้ใน

วิธีที่ฉันจัดการบังคับนอกจากของ URL เขียนใหม่คือการสร้างปลั๊กอินในวิธีการcreate() \Magento\Catalog\Model\ResourceModel\Product\CollectionFactoryและทันทีที่รหัสของคุณ (หรือรหัสหลักของ Magento) ใช้โรงงานนี้เพื่อทำการติดตั้งชุดผลิตภัณฑ์ (และควรเป็นแนวทางปฏิบัติที่ดีที่สุด) ปลั๊กอินนี้บังคับ\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;
    }
}

ฉันลองด้วยวิธีนี้ แต่คลาสปลั๊กอินไม่ได้ทำงาน คุณรู้ไหมว่าทำไม?
Deeps

0

ส่งออกผลิตภัณฑ์ของคุณไปยังไฟล์ csv

จากไฟล์ csv ใน Excel ใช้สูตรนี้สำหรับคอลัมน์ url_key

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

โดยที่ "P103" คือคอลัมน์ url_key

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.