Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

#13720
estou usando a versão 1.5.1.3, porém o plugin não funcionou, ai fiz a seguinte modificação e ficou 100%:

dentro no método ControllerCommonRoute->check() no arquivo do plugin, remova as seguintes linhas:
Código: Selecionar todos
$uri = substr(str_replace(strrchr($this->request->server['REQUEST_URI'], '?'), '', $this->request->server['REQUEST_URI']),1 );
$uri = (substr($uri, -1)=='/')? $uri = substr($uri, 0, strrpos($uri, '/')) : $uri;
no lugar delas, insira as seguintes:
Código: Selecionar todos
$uri = '';
if(preg_match('@^_route_=([a-z_\-/]+)$@', $this->request->server['QUERY_STRING'], $matches))
	$uri = $matches[1];

acontecia era o seguinte, o variável $uri ficava com o diretório, por exemplo, se a loja ficava no diretório 'loja' e acessasse exemplo.com.br/loja/pagina_inicial a $uri ficava com o valor 'site/pagina_inicial'

o método deve ficar assim:
Código: Selecionar todos
public function check() {
		$uri = '';
		if(preg_match('@^_route_=([a-z_\-/]+)$@', $this->request->server['QUERY_STRING'], $matches))
			$uri = $matches[1];
        // Só irá retornar algo se a queryString "Route" nao estiver setada.
        if((!isset($this->request->get['route'])) AND (trim($uri) <> '')){
            if(array_key_exists($uri, $this->pages)){
              $this->request->get['route'] = $this->pages[$uri]; // evita incompatibilidade com outros módulos que usam a QueryString "route"
			 return $this->forward($this->pages[$uri]);
            }
        }
    }
abraços
Editado pela última vez por vaneves em 12 Jan 2012, 22:15, em um total de 1 vez.
#13724
Valeu pela contribuição!!

Só uma dica (nem tanto para você, é mais para outros que não tem a experiência necessária para adaptar como você fez):

Se você usa a loja em um subdir, considere criar um subdomínio para ela. Você pode encontrar vários percalços como esse em outros módulos...
#13725
Renato Frota escreveu:Valeu pela contribuição!!

Só uma dica (nem tanto para você, é mais para outros que não tem a experiência necessária para adaptar como você fez):

Se você usa a loja em um subdir, considere criar um subdomínio para ela. Você pode encontrar vários percalços como esse em outros módulos...
pois é, mas eu descobri o problema trabalhando localhost, normalmente criu diretório. o bom foi que descobrimos que o problema provavelmente não é com a versão, mas sim com o diretório
#13759
Galera, seguinte, fiz mais uma solução para o módulo, dessa vez criei um hook para alterar automaticamente as url's, sem a necessidade de ficar alterando o código dos controllers (mas somente das urls listadas na propriedade $pages, vale lembrar que a versão mais recente do opencart tem urls a mais, então deve inserí-las), pois bem, dentro do ControllerCommonRoute (classe desse plugin) criei o método 'rewrite':
Código: Selecionar todos
public function rewrite($url) {
		$urls = array();
		foreach($this->pages as $k => $v)
			$urls[$v] = $k;
		
		if(preg_match('@index.php\?route=([a-z_\-/]+)@', $url, $matches)) {
			if(array_key_exists($matches[1], $urls))
				$url = str_replace($matches[0], $urls[$matches[1]], $url);
		}
		return $url;
	}
A outra coisa a fazer é adicionar a classe ao hook da reescrita de url, para isso, dentro do método check (no início do método) adicione o código:
Código: Selecionar todos
$this->url->addRewrite($this);

Porém, vi que há uma incompatibilidade entre o módulo route (este) e o seo_url que vem no opencart, acontece que, quando acesso uma página com a reescrita do 'route', por exemplo 'pagina_principal', o seo_url não funciona, não dispara erro, mas também não reescreve os produtos, categorias e etc. Esse problema não é gerado dessa solução que apresentei, acho que é do próprio 'route', pois com ele padrão o problema persiste. Vou tentar solucioná-lo, caso consiga posto, se alguém pude ajudar também agradeço.

Abraço
#13778
Bom galera, consegui encontrar o problema, mas a solução tive que adaptar, por enquanto, é seguinte, na index.php a gente a seguinte instrução para chamar o 'route':
Código: Selecionar todos
$controller->addPreAction(new Action('common/route/check'));
Isso adiciona dentro da classe Front um elemento da propriedade 'pre_action', assim como o 'maintenance' (que verifica se o site está em manutenção) e o 'seo_url', porém, ao percorrer essa lista dentro da classe Front é verificado por ordem de instanciação qual o primeiro a ser encontrado é executa e os demais não (tem um break), ai se o servidor estiver em manutenção os demais não são executados, por exemplo. Sendo assim, ao executar o 'route' ele interrompia a execução do 'seo_url', para resolver isso apenas comentei o 'break' dentro do arquivo '/system/engine/front.php' no método 'dispatch'. Mas fazendo isso existe outro problema, dentro do '/catalog/controller/common/seo_url.php' procure por '// Decode URL' (mais ou menos na linha 9) e adicione mais um condicional do if, verificando se não existe a querystring 'route', ficando assim o if:
Código: Selecionar todos
if (isset($this->request->get['_route_']) && !isset($this->request->get['route'])) {
Por enquanto isso resolve o problema, vou continuar tentando resolver isso sem modificações fora do 'route'.

Abraços.
#14356
Ola pessoal, estou com um probleminha bobo de iniciante.

Já renomiei o arquivo .htaccess.txt >> .htaccess (chmod 666) e habilitei a opção de mod-rewrite das urls amigáveis no sistema do OpenCart, mas quando faço o teste obtenho o erro 5oo Internal Server Error... o que pode ser? O que posso fazer para testar?

Meu host tem Linux Cpanel instalado e atalizado.
#14358
planovisual escreveu:Ola pessoal, estou com um probleminha bobo de iniciante.

Já renomiei o arquivo .htaccess.txt >> .htaccess (chmod 666) e habilitei a opção de mod-rewrite das urls amigáveis no sistema do OpenCart, mas quando faço o teste obtenho o erro 5oo Internal Server Error... o que pode ser? O que posso fazer para testar?

Meu host tem Linux Cpanel instalado e atalizado.
Certamente é o arquivo .htaccess, vc modificou ele? se sim, o que? (poste o conteúdo dele aqui).


Editado:
Pode ser o "RewriteBase /", que deve estar com o endereço correto em servidores linux, por exemplo, se o diretório é '/home/vaneves/opencart', o base deve estar:
Código: Selecionar todos
RewriteBase /home/vaneves/opencart
#14381
Entrei em contato com o suporte da hospedagem e descobri que eles estão solicitando que se retire a linha '' Options +FollowSymlinks '' do arquivo .htaccess, depois disso o site parou que sair do ar e apresentar o erro 500 internal server error.
Porém ainda não resolveu, porque quando tento acessar o site em barracaonline.com.br/livros aparece o erro 500 novamente, mas apenas nas urls SEFs, nas url dinamicas nao... O que pode ser? Alguem tem ideia?