Magento 2

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

No , 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 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 de desempenho, foi uma boa idéia remover esse indexador do 2. Mas isso tem outras desvantagens…

Problema

Uma reescrita de url é necessária para URLs de loja otimizados para . 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 . Isto é exatamente o mesmo que no Magento 1.

 

Tags: magento 2

Post Recentes

Por que devo sempre manter o Magento 2 atualizado?

Segurança: Atualizações frequentes geralmente incluem patches de segurança para corrigir vulnerabilidades identificadas. Ao manter o Magento atualizado, você reduz significativamente…

1 mês atrás

Adicionar uma mensagem de Alerta ou Aviso do Admin do Magento 2

Como adicionar uma mensagem de Alerta ou Aviso do Admin do Magento 2 Injete o Magento\Framework\Message\ManagerInterface no construtor da sua…

1 mês atrás

Exibir mensagens erro/sucesso da Classe: Magento\Framework\Message\ManagerInterface

Para exibir as mensagens adicionadas na classe Magento\Framework\Message\ManagerInterface em um arquivo .phtml, você pode usar o seguinte código: <?php $objectManager…

1 mês atrás

Exportar as categorias do Magento 2 em um XML

Para criar um script no Magento 2 que exporte as categorias para um arquivo XML com o nome da categoria,…

2 meses atrás

Colocar um video como Background utilizando HTML + CSS

Para definir um vídeo MP4 como plano de fundo em um <div> usando HTML e CSS, você pode seguir estas…

4 meses atrás

Desativar o “lastname” no Magento 2

Como desativar o "lastname" no Magento 2 e Adobe Commerce Desativando a obrigatoriedade do campo Execute a SQL abaixo diretamente…

4 meses atrás