마 젠토 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/


인덱스 재 구축
Marius

@ 마리우스 : 나도 재건했다. 제품 재 작성 URL을 반환하지 않습니다.
zed Blackbeard

귀하의 제품이 모든 웹 사이트와 연관되어 있습니까?
Marius

주 웹 사이트에 제품을 할당했습니다
zed Blackbeard

getProductUrl()에 항목이 있으면 다시 작성된 URL을 반환해야합니다 url_rewrite. 이 테이블에서 레코드를 수동으로 삭제 했습니까?
musicliftsme

답변:


4

제품 URL을 얻는 데 사용한 방법은 다음과 같습니다.

성능면에서 너무 나쁘게 만들기 위해 전체 제품을로드해야하기 때문에 확실히 최적이 아닙니다.

먼저 Magento\Catalog\Model\ProductRepository생성자에 a를 주입해야합니다 .

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

그런 다음 제품 ID를 기준으로 제품을로드합니다.

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

마지막으로 URL 모델이 다시 작성된 URL을 검색하도록 할 수 있습니다.

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

끝에있는 이중 쉼표는 의도 된 것이 아닙니까?
Max

@Max 네, 완전히 제거했습니다
Raphael at Digital Pianism

5
나는 똑같이 직면하고 있으며 코드를 시도했지만 여전히 URL이 잘못되었습니다. 조언 부탁드립니다.
Anshu Mishra

또 다른 방법 (및 성능 저하가 적은)은 제품 콜렉션로드에서 URL 재 작성을 강제로 추가하는 것입니다. 내 대답을 참조하십시오.
Hervé Guétin

이 오류를 어디에 넣을 수 있는지 같은 오류가 있습니까?
Rahul Katoch

3

이것은 실제로 질문에 대답하지는 않지만 URL 재 작성이 누락되면 제품이 제품 콜렉션에서 벗어날 수 있습니다. 에서 볼 수 있듯이 URL 재 작성 정보를 추가하는 것은 자동이 아닙니다 \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite.

URL 다시 쓰기를 강제로 관리하는 create()방법은 의 메소드 에서 플러그인을 만드는 것입니다 \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory. 그리고 곧 코드 (또는 젠토의 핵심 코드)와 같은 제품을 수집 instanciating이 공장을 사용하는 (그리고해야한다 등의 모범 사례),이 플러그인을 강제 \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewritetrue.

그런 다음 제품 URL을 다시 작성하지 않아도 제품 URL 다시 쓰기가 제품에 성공적으로 추가됩니다. 따라서 @Raphael이 말한 성능 저하를 해결합니다.

다음은 플러그인 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 파일로 내보내기

Excel의 CSV 파일에서 url_key 열에이 수식을 사용하십시오.

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

여기서 "P103"은 url_key 열입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.