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…
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…
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.
Segurança: Atualizações frequentes geralmente incluem patches de segurança para corrigir vulnerabilidades identificadas. Ao manter o Magento atualizado, você reduz significativamente…
Como adicionar uma mensagem de Alerta ou Aviso do Admin do Magento 2 Injete o Magento\Framework\Message\ManagerInterface no construtor da sua…
Para exibir as mensagens adicionadas na classe Magento\Framework\Message\ManagerInterface em um arquivo .phtml, você pode usar o seguinte código: <?php $objectManager…
Para criar um script no Magento 2 que exporte as categorias para um arquivo XML com o nome da categoria,…
Para definir um vídeo MP4 como plano de fundo em um <div> usando HTML e CSS, você pode seguir estas…
Como desativar o "lastname" no Magento 2 e Adobe Commerce Desativando a obrigatoriedade do campo Execute a SQL abaixo diretamente…