Magento 2: nhận viết lại url sản phẩm


15

Tôi đang cố gắng để có được rewrite product urltừ các load productmô-đun tùy chỉnh. Tôi đang nhận được url trong http://localhost/m2/catalog/product/view/id/1401/category/23/định dạng.

Nhưng tôi muốn http://localhost/m2/juno-jacket.html

Đây là mã

trong nhà xây dựng

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

Chức năng tùy chỉnh

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

abc() method trả lại url như http://localhost/m2/catalog/product/view/id/1401/category/23/


xây dựng lại các chỉ mục của bạn
Marius

@Marius: tôi cũng đã xây dựng lại. Nó không trả lại url viết lại sản phẩm.
zed Blackbeard

sản phẩm của bạn được liên kết với bất kỳ trang web?
Marius

Tôi đã chỉ định sản phẩm trong trang web chính
zed Blackbeard

getProductUrl()được cho là trả lại URL viết lại nếu mục tồn tại url_rewrite. Bạn đã xóa hồ sơ từ bảng này bằng tay?
nhạcliftsme 17/03/2016

Câu trả lời:


4

Đây là phương pháp tôi đã sử dụng để lấy url sản phẩm.

Nó chắc chắn là không tối ưu vì tôi phải tải toàn bộ sản phẩm để có được nó rất tệ về hiệu suất.

Trước tiên, bạn cần tiêm một hàm Magento\Catalog\Model\ProductRepositorytạo:

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

Sau đó, bạn tải sản phẩm dựa trên id sản phẩm:

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

Cuối cùng, bạn có thể lấy mô hình URL để truy xuất URL được viết lại:

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

Dấu phẩy kép ở cuối không có ý định, phải không?
Tối đa

@Max yeah hoàn toàn, tôi đã xóa nó
Raphael tại Digital Pianism

5
Tôi đang đối mặt như vậy và tôi đã thử mã của bạn nhưng vẫn là các url không chính xác đối với tôi. Xin tư vấn.
Anshu Mishra

Một cách khác (và ít kẻ giết người hoàn hảo hơn) có thể là buộc thêm URL viết lại vào tải bộ sưu tập sản phẩm. Xem câu trả lời của tôi.
Hervé Guétin

lỗi tương tự bạn có thể vui lòng cho tôi biết nơi tôi có thể đặt mã này?
Rahul Katoch

3

Điều này có thể không thực sự trả lời câu hỏi nhưng rất có thể, nếu bạn thiếu viết lại URL, bạn có thể đưa sản phẩm của mình ra khỏi bộ sưu tập sản phẩm. Và việc thêm thông tin viết lại URL không tự động như bạn có thể thấy \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite.

Cách tôi quản lý buộc phải thêm URL viết lại là bằng cách tạo một plugin theo create()phương pháp \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory. Và ngay sau khi mã của bạn (hoặc mã cốt lõi của Magento) sử dụng nhà máy này để cung cấp bộ sưu tập sản phẩm (và theo thông lệ tốt nhất), plugin này buộc \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewritephải thực hiện true.

Sau đó, viết lại URL sản phẩm được thêm thành công vào các sản phẩm mà không cần phải lặp lại chúng và tải lại chúng. Do đó, nó khắc phục nhược điểm hoàn hảo mà @Raphael đã nói đến.

Đây là định nghĩa XML của plugin (trong di.xmltệp của bạn ):

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

Và mã plugin:

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

Tôi đã thử cách này, nhưng lớp plugin không thực thi. Bạn có biết tại sao?
Sâu

0

Xuất sản phẩm của bạn sang tệp csv

từ tệp csv trong Excel, hãy sử dụng công thức này cho cột url_key

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

trong đó "P103" là cột url_key

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.