Encontrei a solução.
O problema ocorre após updates, devido a uma mudança na forma como o OC 1.5 salva os módulos ativos no banco de dados. O script de update deveria corrigir isso, mas não o faz.
Segundo o autor que contribuiu no fórum em inglês, os passos para resolução, são:
1º - desinstale todos os módulos e instale-os novamente. isso salvará os módulos no banco usando o novo método (você pode tentar simplesmente editando o módulo e salvando sem editar nada. pessoalmente, eu não tentei isso)
2º - se isso não resolver, tente essa modificação simples no arquivo
system/library/config.php, alterando a função
get:
Código: Selecionar todospublic function get($key)
{
$data = isset($this->data[$key]) ? $this->data[$key] : null;
if (strpos($key, '_module') && !is_array($data) && !is_null($data))
{
// is not array convert to array
$arr = explode(',', $data);
$key_ = str_replace('_module', '_', $key);
$data = array();
foreach ($arr as $a)
{
$r = array();
$key_prefix = $key_ . $a . '_';
foreach($this->data as $k=>$v)
{
if(strpos($k,$key_prefix)!==false)
{
$new_key = str_replace($key_prefix, '', $k);
$r[$new_key] = $v;
}
}
$data[] = $r;
}
}
return $data;
}
Adicionalmente, você pode tentar ler os módulos antigos da 1.4 (que não são padrão do OC) usando uma nova função getOld:
Código: Selecionar todospublic function getOld($key)
{
// get module innew way and convert to comma seperated indexes
$modules = $this->get($key);
if(is_array($modules))
{
$r = array();
foreach($modules as $k=>$v)
{
$r[] = $k;
}
$modules = implode(',',$r);
}
return $modules;
}
Depois de adicionar essa função getOld, chame o módulo usando:
Código: Selecionar todos$modules = explode(',', $this->config->getOld('example_module'));
ao invés de de:
Código: Selecionar todos$modules = explode(',', $this->config->get('example_module'));