Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Salve galera!
Estou com um problema de rotas no codeigniter.
A terceira rota é direcionada para uma página de detalhes, que fica pacotes/teste-um-imaster, mas ao selecionar os dois primeiros itens já cai na terceira.
$route['pacotes/nacionais/(:num)'] = "pacotes/nacionais/$1";
$route['pacotes/internacionais/(:num)'] = "pacotes/internacionais/$1";
$route['pacotes/(:any)'] = "pacotes/detalhes/$1";
Alguém pode me ajudar a achar uma solução para este caso...
Valew
Faz um tempinho que não trabalho com CI (CodeIgniter), mas acho que posso te ajudar.
Se pacotes é um módulo, com um controller chamado pacotes, você necessita somente da terceira rota.
O CI trabalha de uma forma interessante com as classes e métodos.
Se você está utilizando a url 'pacotes/nacionais', o CI irá procurar um controller chamado Pacotes e um método chamado Nacionais, o que vier depois de nacionais, são parâmetros do método.
Para simplificar, eu utilizaria o detalhamento em um nível abaixo da "nacionalidade". Utilizando a rota da seguinte maneira:
$route['pacotes/(inter)?nacionais/(:num)'] = "pacotes/detalhes/$2";
Deve verificar a sintaxe da rota, acredito que esteja correta.
A URL estará completa, mas "debaixo dos pano", você apenas chamará o método detalhes do controller pacotes. Além de ser útil para os motores de busca, que separarão seus pacotes em duas categorias (nacionais/internacionais).
Você também precisará utilizar a meta canonical, pois você poderá acessar o mesmo pacote de 3 maneiras.
>
www.seusite.com.br/pacotes/detalhes/1
www.seusite.com.br/pacotes/internacionais/detalhes/1
www.seusite.com.br/pacotes/nacionais/detalhes/1
Caso não queira utilizar a meta canonical, pode utilizar um redirecionamento permanente, tratando a requisição dentro do método detalhes. Redirecionando para o endereço "correto". Os motores de busca agradecem.
>
Isso tá certo? :
$route['pacotes/(:any)'] = "pacotes/detalhes/$1";
Não seria assim:
$route['pacotes/detalhes/(:any)'] = "pacotes/detalhes/$1";
Eu não entendo de Codeigniter, mas acredito que a lógica seria essa né? Eu sei que any pega todos, mas eu não entendi sua lógica.
Você quer "pegar" "detalhes/$1" ???
Silverfox,
Desta forma está correto, pois não quero exibir "/detalhes" após pacotes e sim o nome do pacote...
$route['pacotes/(:any)'] = "pacotes/detalhes/$1";
Gabriel Heming,
Coloquei da forma que você falou, mas não funcionou.
$route['pacotes/(inter)?nacionais/(:num)'] = "pacotes/detalhes/$2";
Resolvi fazendo desta forma...
$route['pacotes/nacionais'] = "pacotes/nacionais";
$route['pacotes/nacionais/(:num)'] = "pacotes/detalhes/$1";
$route['pacotes/internacionais'] = "pacotes/internacionais";
$route['pacotes/internacionais/(:num)'] = "pacotes/internacionais/$1";
$route['pacotes/(:any)'] = "pacotes/detalhes/$1";
Isso tá certo? :
$route['pacotes/(:any)'] = "pacotes/detalhes/$1";
Não seria assim:
$route['pacotes/detalhes/(:any)'] = "pacotes/detalhes/$1";
Eu não entendo de Codeigniter, mas acredito que a lógica seria essa né? Eu sei que any pega todos, mas eu não entendi sua lógica.
Você quer "pegar" "detalhes/$1" ???