Página 2 de 2

Re: Upgrade 1.5.1 para 1.5.1.1

Enviado: 10 Set 2011, 22:30
por cdkeys4ever
Puxaa,

deletei a pasta module, dei upload na original e mesmo assim o erro persistiu =[

Re: Upgrade 1.5.1 para 1.5.1.1

Enviado: 10 Set 2011, 23:10
por Renato Frota
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 todos
public 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 todos
public 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'));