Manual - Correção bug OCMOD OpenCart 4.x
Enviado: 26 Dez 2025, 14:03
Olá;
Essa é uma pequena dica para quem está utilizando o opencart 4.x e as modificações XML OCMOD não entra em vigência após atualizar as modificações, isso ocorre devido ao opencart não buscar a alteração OCMOD e sim os arquivo nativo do opencart, com base nisso personalizei um script PHP que deve ser executado na raiz da loja "frete da loja", ele irá substituir algumas linha em dois arquivos, e com isso as extensões ocmod irão funcionar corretamente;
Salve o conteúdo abaixo em um arquivo chamado "corrigir_bug_ocmod.php" na raiz de sua loja e acesse o mesmo pela url exemplo "https://www.seudominio.com.br/corrigir_bug_ocmod.php"
Essa é uma pequena dica para quem está utilizando o opencart 4.x e as modificações XML OCMOD não entra em vigência após atualizar as modificações, isso ocorre devido ao opencart não buscar a alteração OCMOD e sim os arquivo nativo do opencart, com base nisso personalizei um script PHP que deve ser executado na raiz da loja "frete da loja", ele irá substituir algumas linha em dois arquivos, e com isso as extensões ocmod irão funcionar corretamente;
Salve o conteúdo abaixo em um arquivo chamado "corrigir_bug_ocmod.php" na raiz de sua loja e acesse o mesmo pela url exemplo "https://www.seudominio.com.br/corrigir_bug_ocmod.php"
Código: Selecionar todos
<?php
//OpenCart 4.x BUG FIX OCMOD -> https://github.com/opencart/opencart/pull/14622/files
declare(strict_types=1);
error_reporting(E_ALL);
ini_set('display_errors', '1');
$root = realpath(__DIR__);
$changes = 0;
function backup(string $file): void {
copy($file, $file . '.bak_' . date('Ymd_His'));
}
function replace_once(string $file, string $search, string $replace): void {
global $changes;
$content = file_get_contents($file);
if (strpos($content, $replace) !== false) {
return;
}
if (strpos($content, $search) === false) {
return;
}
backup($file);
file_put_contents($file, str_replace($search, $replace, $content));
$changes++;
}
function insert_before(string $file, string $marker, string $block): void {
global $changes;
$content = file_get_contents($file);
if (strpos($content, 'function modification(') !== false) {
return;
}
$pos = strpos($content, $marker);
if ($pos === false) {
return;
}
backup($file);
$content = substr($content, 0, $pos) . $block . substr($content, $pos);
file_put_contents($file, $content);
$changes++;
}
/**
* system/engine/autoloader.php
*/
$autoloader = $root . '/system/engine/autoloader.php';
replace_once(
$autoloader,
'include_once($file);',
'include_once(modification($file));'
);
/**
* system/startup.php
*/
$startup = $root . '/system/startup.php';
$function = <<<PHP
function modification(\$filename): string {
\$modification = DIR_EXTENSION . 'ocmod/' . substr(\$filename, strlen(DIR_OPENCART));
if (is_file(\$modification)) {
return \$modification;
}
return \$filename;
}
PHP;
insert_before($startup, '// OpenCart Autoloader', $function);
replace_once(
$startup,
"require_once(DIR_SYSTEM . 'engine/autoloader.php');",
"require_once(modification(DIR_SYSTEM . 'engine/autoloader.php'));"
);
replace_once(
$startup,
"require_once(DIR_SYSTEM . 'engine/config.php');",
"require_once(modification(DIR_SYSTEM . 'engine/config.php'));"
);
header('Content-Type: text/plain; charset=utf-8');
echo "Correção OCMOD OpenCart 4.x finalizada\n";
echo "Alterações aplicadas: {$changes}\n";