Webly: Função Para Criar Url Amigável Com Php - Webly

Ir para

Regras para postagem

É permitido postar livremente respostas com comentários, testes e avaliações dos scripts. Postagens contendo dúvidas sobre o script, deverão ser postadas no fórum principal de PHP

IMPORTANTE: Todos os tutoriais postados neste fórum irão automaticamente para o portal Webly. Contribua você também e faça parte da equipe de colaboradores que fazem a evolução da web. Obrigado.
Página 1 de 1

Função Para Criar Url Amigável Com Php Não vi nada parecido aqui e achei bem interessante. Avaliar tópico: -----

#1 Membro offline   ViniciusSPL Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 27
  • Cadastrado: 22-outubro 07

Postou 15 abril 2009 - 01:20

Na realidade a URL tem a função de endereçar um determinado recurso na internet, um site, FTP etc. Mas como oportunidade de marketing e vendas, tornou-se importante a usabilidade, SEO (Otimização dos motores de busca) e a acessibilidade, assim gerando a melhora da experiência do o usuário.

Nesse artigo pretendo ensinar uma forma fácil de construir uma função que fique responsável por formatar a URL, tornando-a dinâmica e amigável. Diferente das demais formas de construção de URL´s Amigáveis, essa forma trabalha com um método de "Alias" (apelidos) para determinado arquivo ou pasta e possibilita a o envio de variáveis via GET.

Obs.: Esse método está sendo aplicado da forma mais simples possível, justamente para melhor entendimento do processo.

Requerimento:

  • Conhecimentos intermediários nas diretivas do Apache;
  • Conhecimentos Intermediários em expressão Regular;
  • Conhecimentos Intermediários em PHP;
  • Apache com o mod_rewrite habilitado.
Primeiramente, criaremos um diretório onde ficará o projeto, vamos chamá-lo de projeto_1.

Dentro desse diretório criaremos três arquivos e um diretório:

  • O arquivo .htaccess, onde criaremos a regra de reescrita da url;
  • O arquivo main.php, que será responsável dela indexação do site;
  • O arquivo url_response.php, onde será codificada a função para o tratamento da url;
  • O diretório applications, onde serão guardados nossos aplicativos ex.: noticias.php, índex.php etc
No arquivo .htaccess vamos criar regras de url usando o mod_rewrite(módulo responsável por reescritas de url) do apache.

# Habilitamos o modo Rewrite

RewriteEngine on #Aqui, criamos as regras de redirecionamento.

RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ main.php Detalhando o arquivo .htaccess

Na diretriz RewriteEngine é possível habilitar(On) ou desabilitar(off) o modo de reescrita do apache. Em RewriteRule configuramos a regra de reescrita das urls, neste caso redirecionamos para main.php.

Feito isso vamos criar e codificar a função responsável por tratar a URL, abra o arquivo url_response.php:
<?php

		//diretório do projeto
		if(!defined(´PROJECT_DIR´))
				define(´PROJECT_DIR´, ´projeto_1´);
				
		// diretório da aplicacao
			 if(!defined(´APPLICATION_DIR´))	
				define(´APPLICATION_DIR´, ´applications´);

		// URL enviado
			if(!defined(´REQUEST_URI´)) 
				define(´REQUEST_URI´	,str_replace(´/´.PROJECT_DIR,´´,$_SERVER[´REQUEST_URI´]));

		 /**
			   * Função Resposável pelo tratamento da URL
			   *
			   * @author Camilo Teixeira de Melo
			   * @link http://www.camilotx.com.br
			   * @param string $urlpatterns array com os modelos de url
			   * @return void
			  **/
		function url_response($urlpatterns){
						foreach($urlpatterns as $pcre=>$app){
								if(preg_match("@^{$pcre}$@",REQUEST_URI,$_GET)){
												include(APPLICATION_DIR.´/´.$app);
												exit();
								}else{
										$msg = ´<h1>404 Página não existe</h1>´;
								}
						}
						echo $msg;
				return;		 
		}

?>


Neste trecho:

//diretório do projeto

if(!defined(´PROJECT_DIR´)) define(´PROJECT_DIR´, ´projeto_1´);

Definimos a constante PROJECT_DIR onde conterá o diretório do projeto. No trecho a seguir definimos o diretório da aplicação e a url enviada pelo browser.

// diretório da aplicacao if(!defined(´APPLICATION_DIR´))

define(´APPLICATION_DIR´, ´applications´); // URL enviado

if(!defined(´REQUEST_URI´)) define(´REQUEST_URI´ ,str_replace(´/´.PROJECT_DIR,´´,$_SERVER[´REQUEST_URI´]));

Por último a constituição da função url_response responsável pelo tratamento da url.

foreach($urlpatterns as $pcre=>$app){ if(preg_match("@^{$pcre}$@",REQUEST_URI,$_GET)){

include(APPLICATION_DIR.´/´.$app); exit();

}else{ $msg = ´<h1>404 Página não existe</h1>´;

} }

Aqui é criado um laço responsável por percorrer o array com as URLs padrões e procurar o arquivo na pasta de aplicações, caso exista é feito sua inclusão. Caso não exista o arquivo apresento uma mensagem de página inexistente, ou 404.

Usando a função no arquivo main.php:


<?php
		   include(´url_response.php´); 
		  $urlpatterns = array(
				´/´=>´index.php´,
				´/noticias´=>´noticias.php´,
				´/noticia/(?P<id_noticia>\d+)´=>´noticias.php´,
		   );
		  url_response($urlpatterns);
?>




O include não tem segredo. Na array $urlpatterns como o próprio nome diz refere-se aos padrões de url. O índice do array é a url e o valor é o arquivo que deve ser executado.

Exemplo: ´/´=>´index.php´

´/´ refere-se a raiz por exemplo www.dominio.com.br/ que será redirecionado ao índex.php ´/noticias´=>´noticias.php´

´/noticias´ refere-se a www.dominio.com.br/noticias onde executa o arquivo noticias.php ´/noticia/(?P<id_noticia>\d+)´=>´noticias.php´

Aqui eu usufruo da expressão regular para enviar um parâmetro com valor decimal Via GET. A url ´/noticias/(?P<id_noticia>\d+)´ refere-se a www.dominio.com.br/noticias/12. O valor é acessado via GET para o arquivo notícias.php

Por último criamos os arquivos índex.php e noticias.php na pasta applications.

Abaixo deixo um exemplo simples dos arquivos para melhor entendimento do processo de cada arquivo. index.php


<?php
		echo ´você está na index´;
?>



noticias.php

<?php
			 i f(isSet($_GET[´id_noticia´]))
				 echo ´Exibindo a notícia de id ´ .$_GET[´id_noticia´];
			else
				  echo (´Notícias´);

?>


Creditos ao Camilo Teixeira de Melo
Para entrar no link original clique aqui
0

Página 1 de 1


Resposta rápida

  

1 usuário(s) está(ão) lendo este tópico
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)