SnakeX 1 Denunciar post Postado Agosto 15, 2009 Boas :) É o seguinte, quero criar uma função que converta urls normais para urls amigaveis. Ex: index.php?pagina=catalogo => catalogo/ index.php?pagina=catalogo.produto&id=1000 => catalogo/1000.produto Eu já comecei a função: $patterns = array( 'index.php?pagina=' => '{pagina}/', 'index.php?pagina=catalogo.produto&id=' => 'catalogo/{id}.produto', ); function RewriteURL($url) { global $patterns; foreach($patterns as $key => $valor) { if(strstr($url, $key)) { return $valor; break; } } } Eu não sei como explicar mas a função está fazendo já um pouquinho do que eu quero que ela faça, ou seja, ela vai ao array $patterns e verifica se tem lá alguma string igual ao $url se tiver retorna $valor. Prontos, o que eu queria que ela fizesse mais é o seguinte: No array $patterns ter algo assim: "index.php?pagina={pagina}" => "{pagina}/" e depois a função pegar do url a pagina e trocar no $valorExemplo: 1º RewriteURL('index.php?pagina=catalogo'); 2º RewriteURL('index.php?pagina=catalogo.produto&id=1000'); Ela retornaria algo assim: 1º catalogo/ 2º catalogo/1000.produto Não sei se com regex dará para fazer isso, mas eu de regex percebo muito pouco lol Queria tornar a função dinámica pois o array $pattern iria ter urls de várias maneiras.... Toda a ajuda que poderem dar eu agradeço :) Obrigado ;) Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Agosto 15, 2009 procura por url amigaveis.....ou mod rewrite.... Compartilhar este post Link para o post Compartilhar em outros sites
SnakeX 1 Denunciar post Postado Agosto 15, 2009 Eu sei o que é mod_rewrite... o que eu pretendo é mudar os urls do HTML através de uma função em PHP de forma automática, porque o sistema tem de funcionar com ou sem mod_rewrite... Compartilhar este post Link para o post Compartilhar em outros sites
Rafael Wapbrasil 1 Denunciar post Postado Agosto 16, 2009 Isto nao eh para ser usado no htaccess nao? Compartilhar este post Link para o post Compartilhar em outros sites
SnakeX 1 Denunciar post Postado Agosto 17, 2009 mod_rewrite sim mas o que eu quero é uma função que traduza isto: "index.php?pagina=nome_da_pagina&id=25" para nome_da_pagina/25 Já consegui fazer o queria: $pagina = ''; $rewrites = array( '/index.php?pagina=([a-z0-9]{1,99})&id=([0-9]{1,99})?/' => 'catalogo/{2}.{1}', '/index.php?pagina=([a-z0-9]{1,99})?/' => '{1}', ); $pagina_ = 'index.php?pagina=produto&id=25'; foreach($rewrites as $bl => $pagina) { if(preg_match($bl, $pagina_, $matches)) { foreach($matches as $id => $valor) { $pagina = str_replace('{' . $id . '}', $valor, $pagina); } break; } } Por exemplo, se eu acessar a pagina: index.php?pagina=produto&id=25 ele retorna catalogo/25.produto index.php?pagina=nome_da_pagina ele retorna nome_da_pagina não sei se percebem o que queria fazer mas prontos já está meio caminho andado =) Como não percebia praticamente nada de regex tive de estudar e olha consegui me safar... não sei se é possível melhorar a parte do regex mas se for me avisem como =D Compartilhar este post Link para o post Compartilhar em outros sites
eibon 2 Denunciar post Postado Agosto 17, 2009 Pelo que eu entendi,você quer urls amigaveis,só que quer fazer o Rewrite pelo PHP correto? Não é possivel.Você tem que ter algo a nivel da requisição/webserver para dizer para onde seus requests serão encaminhados. Claro...você poderia fazer uma url do tipo: www.seusite.com/pagina.extensao?urlamigavel Compartilhar este post Link para o post Compartilhar em outros sites
SnakeX 1 Denunciar post Postado Agosto 17, 2009 Não amigo não é isso... Eu através do PHP só quero converter as URL's nada mais... o mod_rewrite eu uso pelo .htaccess.. Portanto, pelo PHP só converto as URL's do HTML porque imagina que eu de um momento para o outro deixo de querer usar mod_rewrite, se isso acontecer tenho de alterar todas as URL's novamente... e isso dá bastante trabalho... assim é tudo mais fácil... Espero que me tenha feito entender lol Compartilhar este post Link para o post Compartilhar em outros sites
eibon 2 Denunciar post Postado Agosto 17, 2009 A sim...pega o que tá depois do =...e coloca barras depois. Expressões Regulares são uma boa. Estude-as...;D Compartilhar este post Link para o post Compartilhar em outros sites
SnakeX 1 Denunciar post Postado Agosto 17, 2009 Eu já tenho a funcionar isso =) <?php function RewriteUrl($url) { $url = strtolower($url); $pagina = ''; $rewrites = array( '/index.php?pagina=([a-z0-9]{1,99})&id=([0-9]{1,99})?/' => 'catalogo/$2.$1', '/index.php?pagina=([a-z0-9]{1,99}).([a-z0-9]{1,99})?/' => '$1/$2', '/index.php?pagina=([a-z0-9]{1,99})?/' => '$1' , ); foreach($rewrites as $bl => $replacement) { $rep = preg_replace($bl, $replacement, $url); if($rep != $url) { $pagina = $rep; break; } } /* foreach($rewrites as $bl => $pagina) { if(preg_match($bl, $url, $matches)) { foreach($matches as $id => $valor) { $pagina = str_replace('{' . $id . '}', $valor, $pagina); } break; } } /**/ return $pagina; } echo RewriteUrl('index.php?pagina=produto&id=25'); echo ' '; echo RewriteUrl('index.php?pagina=teste&id=158925'); echo ' '; echo RewriteUrl('index.php?pagina=empresa.contactos'); ?> Acredito que dê para optimizar o código, mas como ainda não vou precisar desta função para já vai ficar assim A sim...pega o que tá depois do =...e coloca barras depois. Expressões Regulares são uma boa. Estude-as...;D Compartilhar este post Link para o post Compartilhar em outros sites
eibon 2 Denunciar post Postado Agosto 17, 2009 Faz isso ser padronizado.Não é melhor não? E nem tinha visto...aconteceu uma coisa muito legal comigo,ai to meio desligado...xD Compartilhar este post Link para o post Compartilhar em outros sites
SnakeX 1 Denunciar post Postado Agosto 17, 2009 Faz isso ser padronizado.Não é melhor não? E nem tinha visto...aconteceu uma coisa muito legal comigo,ai to meio desligado...xD Padronizado? Não estou a entender xP Compartilhar este post Link para o post Compartilhar em outros sites
eibon 2 Denunciar post Postado Agosto 17, 2009 Ao invés de ter um jeito de escrever a rewrite para cada página,faz um jeito geral e simplesmente segue em todas. Não me expliquei bem... Compartilhar este post Link para o post Compartilhar em outros sites
SnakeX 1 Denunciar post Postado Agosto 17, 2009 ahh exacto mas para já está bom assim =) Compartilhar este post Link para o post Compartilhar em outros sites