Como recriar “gerar de novo” uma URL no Magento 2

No Magento 2, descobrimos um grande problema com as reescritas de URL.

Todos os produtos são importados por um script de importação. Também todas as categorias são criadas por este script. O problema: todas as reescritas de url de produto não são criadas automaticamente. Eles são criados apenas salvando cada categoria, uma por uma.

Neste Post irei mostrar como fazer isso automaticamente

O Magento 1 tinha um indexador que regenera o url e reescreve automaticamente cada execução desse indexador. Isso foi bastante confortável. O único problema eram as lojas com muitos produtos. Quanto mais produtos e mais reescritas, mais tempo esse indexador é executado. Então, para otimização de desempenho, foi uma boa idéia remover esse indexador do Magento 2. Mas isso tem outras desvantagens…

Problema

Uma reescrita de url é necessária para URLs de loja otimizados para seo. Normalmente, um deeplink para um produto se parece com isso:

http://domain.com/catalog/product/view/id/11431/s/10546560/category/792/

Como você pode ver, não é uma boa ideia, porque os números não são utilizáveis ​​para uma máquina de busca. A melhor solução de SEO é nomear um URL por nome de categoria e nome do produto. Depois que você regenar o URL, o mesmo link será exibido da seguinte maneira:

http://domain.com/fruits/banana

O Magento 2 não cria automaticamente reescritas. Eles são computados apenas se você fizer uma ação como salvar categoria. Isso faz sentido se você criar categorias e produtos em seu back-end. Se você importar essas coisas por código, precisará salvar todas as categorias manualmente após cada importação. Nenhuma solução para um programador…

Solução

Uma solução bastante simples é usar um módulo Magento 2 pronto para executar, que faz exatamente o trabalho de um indexador de reescrita. Um programador fez isso e oferece seu módulo magento2-regenurl no github. Você pode chamar essa regeneração por código ou a partir da linha de comando. Uma solução melhor é fazer isso por código em seu próprio módulo importador. A regeneração é bem simples:

foreach($list as $product) {
    if($store_id === Store::DEFAULT_STORE_ID)
        $product->setStoreId($store_id);
    $this->urlPersist->deleteByData([
        UrlRewrite::ENTITY_ID => $product->getId(),
        UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
        UrlRewrite::REDIRECT_TYPE => 0,
        UrlRewrite::STORE_ID => $store_id
    ]);
    try {
        $this->urlPersist->replace(
            $this->productUrlRewriteGenerator->generate($product)
        );
    } catch(\Exception $e) {
        $out->writeln('Duplicated url for '. $product->getId() .'');
    }
}

Como você pode ver, o Magento 2 oferece um modelo para regravar url \ Magento \ CatalogUrlRewrite \ Model \ ProductUrlRewriteGenerator (productUrlRewriteGenerator) que você pode injetar em seu modelo.

Esta reescrita de URL gerada pode ser substituída por \ Magento \ UrlRewrite \ Model \ UrlPersistInterface (urlPersist).

Você pode executar isso em um loop para todos os produtos após a importação ou para cada produto único após uma alteração. Você encontra o URL reescreve na tabela url_rewrite no seu banco de dados. Isto é exatamente o mesmo que no Magento 1.

 

Avalie este artigo!

Clique nas estrelas, para dar uma nota de 1 à 5.

1 estrela2 estrelas3 estrelas4 estrelas5 estrelas (1 votaram, média: 5,00 de 5)
Loading...

Dúvidas? Faça um comentário logo abaixo ou envie uma mensagem clicando aqui.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *