Eu estou tentando obter rewrite product url
a partir do load product
módulo personalizado. Estou recebendo o URL no http://localhost/m2/catalog/product/view/id/1401/category/23/
formato.
Mas eu quero http://localhost/m2/juno-jacket.html
Aqui está o código
no construtor
public function __construct(
\Magento\Catalog\Helper\Product $catalogProductHelper,
) {
$this->catalogProductHelper = $catalogProductHelper;
}
Função personalizada
public function abc(){
$product_id = '123';
return $this->catalogProductHelper->getProductUrl($product_id);
}
abc() method
retornar url como http://localhost/m2/catalog/product/view/id/1401/category/23/
magento2
product
url
url-rewrite
magento-2.0
zed Barba Negra
fonte
fonte
getProductUrl()
deve retornar o URL reescrito se a entrada existir emurl_rewrite
. Você excluiu registros desta tabela manualmente?Respostas:
Aqui está o método que eu usei para obter o URL do produto.
Definitivamente, não é o ideal, pois preciso carregar o produto inteiro para obter um desempenho tão ruim em termos de desempenho.
Primeiro você precisa injetar um
Magento\Catalog\Model\ProductRepository
no seu construtor:Em seguida, você carrega o produto com base no ID do produto:
Finalmente, você pode obter o modelo de URL para recuperar o URL reescrito:
fonte
Isso pode realmente não responder à pergunta, mas as chances são de que, se estiver faltando a reescrita do URL, você poderá obter seu produto de uma coleção de produtos. E adicionar informações de reescrita de URL não é automático, como você pode ver
\Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
.A maneira como eu consegui forçar a adição de reescritas de URL é criando um plugin no
create()
método de\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
. E logo que o seu código (ou código do núcleo do Magento) usa essa fábrica para instanciating uma coleção de produtos (e que deveria como das melhores práticas), este forças de plug-in do\Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
paratrue
.Em seguida, as reescritas de URL dos produtos são adicionadas com êxito aos produtos sem a necessidade de fazer um loop neles e recarregá-los. Assim, corrige a desvantagem que o @Raphael falou.
Aqui está a definição XML do plug-in (no seu
di.xml
arquivo):E o código do plugin:
fonte
Exporte seus produtos para um arquivo csv
do arquivo csv no Excel use esta fórmula para a coluna url_key
onde "P103" é a coluna url_key
fonte