Como usar o sistema de sobrescrita do PrestaShop sem comprometer o núcleo do sistema.
Este guia ajuda a resolver os overrides no Prestashop 9.x.x, 8.x.x e 7.x.x, explica como os overrides funcionam e como você pode usá-los com Knowband

O sistema de sobrescrita do PrestaShop permite personalizar o comportamento principal sem alterar os arquivos originais. No entanto, usado de forma descuidada, ele cria lojas frágeis que quebram após atualizações. Este guia da Knowband aborda como as sobrescritas funcionam, quando usá-las e três armadilhas críticas que todo desenvolvedor deve conhecer.
O que é o sistema de sobreposição?
O PrestaShop utiliza herança PHP para permitir que você substitua qualquer classe principal por sua própria versão, sem alterar as originais. Cada classe principal recebe o sufixo “Core”, por exemplo, `ProductCore`. Se você criar o arquivo `/override/classes/Product.php` com uma classe chamada `Product` que estende `ProductCore`, o PrestaShop carregará sua versão. O mesmo se aplica aos controladores.
Substitua apenas os métodos específicos que você precisa alterar; nunca copie um arquivo de classe inteiro. Isso mantém sua substituição enxuta e muito menos propensa a conflitos com atualizações futuras.
Por exemplo, expondo o nome do controlador atual no seu modelo de cabeçalho:
Onde colocar seus arquivos de sobreposição
As configurações personalizadas podem estar em dois locais. O diretório global `/override/` na raiz da sua instalação fica ativo imediatamente após a limpeza do cache. A melhor abordagem é agrupar as configurações personalizadas dentro de um módulo.
Colocar um arquivo de sobrescrita dentro de um módulo (por exemplo, /modules/mymodule/override/classes/Product.php) faz com que o PrestaShop o copie para /override/ durante a instalação e o remova completamente durante a desinstalação. Esta é a abordagem recomendada.
Um exemplo rápido de sobrescrita de classe. Digamos que você queira expor o nome do controlador atual no seu modelo de cabeçalho:
// /override/classes/controllers/FrontController.php classe FrontController estende FrontControllerCore { função pública initHeader() { self::$smarty->assign('currentController', get_class($this)); retornar parent::initHeader(); }} Sempre chame o método pai, a menos que tenha um motivo específico para não fazê-lo. Ignorá-lo quebrará silenciosamente a funcionalidade principal.
Sobrescrita de classes e controladores de módulos
A partir do PrestaShop 1.6, você também pode sobrescrever classes de módulos. Adicione “Override” ao nome da classe (por exemplo, BlockUserInfoOverride estendendo BlockUserInfo) e coloque-a em /override/modules/. O mesmo padrão se aplica aos controladores de módulos. Após qualquer sobrescrita, limpe o cache, especificamente exclua o arquivo /cache/class_index.php, ou as alterações não terão efeito.
Quando NÃO usar substituições
As sobrescritas são exclusivas — só pode existir uma por classe. Elas também são proibidas em módulos do marketplace e devem ser reservadas para personalizações privadas da loja. Antes de recorrer a uma sobrescrita, considere uma destas alternativas:
- Ganchos: O PrestaShop dispara eventos de gancho (hook events) em todos os carregamentos de página — você pode acessá-los a partir de um módulo para executar código personalizado ou inserir conteúdo na página sem precisar mexer em nenhuma classe principal.
- Sobrescritas de serviço do Symfony: Partes do PrestaShop que foram migradas para o Symfony oferecem um caminho mais limpo através do contêiner de serviços. Você decora ou substitui um serviço em vez de modificar a própria classe.
- Modelo de objeto personalizado: Precisa adicionar campos a uma entidade principal? Crie seu próprio ObjectModel com sua própria tabela em vez de modificar a existente.
Protegendo as configurações personalizadas por meio de atualizações
As atualizações do PrestaShop podem alterar silenciosamente as assinaturas dos métodos, deixando seu código sobrescrito com base em premissas desatualizadas. Trate cada código sobrescrito como algo a ser revisado após cada atualização. Comente o que você alterou e por quê, verifique o changelog e mantenha o código sobrescrito o menor possível. Um código sobrescrito conciso e bem comentado que chama os métodos da classe pai corretamente sobrevive às atualizações. Uma cópia completa da classe é um bug prestes a ser descoberto.
O cache “fantasma”: por que sua sobrescrita parece invisível
O principal motivo pelo qual os desenvolvedores acreditam que suas configurações personalizadas estão com problemas: o PrestaShop não verifica o diretório `/override/` a cada requisição. Ele compila um mapa de classes em `/cache/class_index.php`, e até que esse arquivo seja excluído e regenerado, sua configuração personalizada permanece invisível, independentemente da correção do código. Limpar o cache do Smarty não é suficiente. Exclua o arquivo `class_index.php` manualmente via FTP/SSH, através de Parâmetros Avançados > Desempenho no painel administrativo ou pelo console do Symfony.
Figura 1: O fluxo do sistema de sobrescrita do PrestaShop e a função de /cache/class_index.php.
O Muro do Symfony: Substituições Legadas Não Funcionam com Controladores Modernos
Este sistema PHP legado funciona apenas na camada ObjectModel mais antiga do PrestaShop. A partir da versão 1.7, áreas importantes do painel administrativo, incluindo as novas telas de Página de Produto e Pedido, foram reescritas em Symfony. O sistema de sobrescrita do PHP não afeta esses controladores do Symfony. Para esses, use Decoração de serviço, encapsulando ou substituindo um serviço através do arquivo services.yml do seu módulo. Se uma sobrescrita não tiver efeito mesmo após limpar o arquivo class_index.php, é provável que o controlador tenha sido migrado para o Symfony.
Resolução de Conflitos: Quando Dois Módulos Desejam a Mesma Classe
Quando dois módulos sobrescrevem a mesma classe, o PrestaShop gera um erro na segunda instalação e deixa a sobrescrita inativa. A solução é manual: abra ambos os arquivos, combine todos os métodos em um único arquivo `/override/` que estenda a classe `Core`, e então exclua o arquivo `class_index.php`. Adicione comentários identificando qual módulo contribuiu com cada método. É por isso que sobrescritas são proibidas em módulos de marketplaces; conflitos se tornam problema do lojista. Se estiver desenvolvendo para terceiros, use hooks.
Figura 2: Como surgem conflitos de sobrescrita quando dois módulos têm como alvo a mesma classe e a resolução manual da mesclagem.
Sobre a Knowband
A Knowband é uma fornecedora confiável de plugins e extensões para e-commerce, com anos de experiência ajudando lojistas online a criar lojas mais rápidas, inteligentes e repletas de recursos. Seja qual for a plataforma em que sua loja opera — a Knowband, por exemplo —, oferece soluções completas e inovadoras para lojas virtuais. PrestaShop, OpenCartShopify, WooCommerce, MagentoSeja para o Google Play ou qualquer outra plataforma importante, a Knowband oferece uma ampla gama de plugins e extensões prontos para uso que ajudam a aprimorar a funcionalidade, melhorar o desempenho e proporcionar uma melhor experiência de compra, sem a necessidade de desenvolver tudo do zero.
- O melhor módulo de SEO para PrestaShop: 10 recursos essenciais para melhorar o posicionamento nos mecanismos de busca.
- Três e-mails de recuperação recuperam 37% mais carrinhos do que um: Criando a sequência ideal de e-mails para carrinhos abandonados no PrestaShop
- Como criar um blog otimizado para SEO no PrestaShop: um guia prático para conteúdo, SEO e busca com IA.
- PrestaShop 9.2 Ask AI vs AI Admin Assistant: qual é o melhor para gerir a sua loja?
- Integração de um gateway de pagamento personalizado no PrestaShop: Requisitos técnicos, fluxo da API e desafios reais do OPC

