[PHP] Gerar URLs Amigáveis

A 2 de Fevereiro de 2010, categoria PHP, por Carlos Gonçalves
7

Gerar URLs Amigáveis para os motores de pesquisa, pode melhorar imenso os resultados na pesquisa. Há uma grande diferença entre “/?p=771″ e “/php-gerar-links-amigaveis”.
Ter URLs amigáveis dá também ao utilizador uma ideia do que irá conter a página em que estão a clicar.

Utilizo uma função em PHP para gerar os URLs amigáveis nos projectos dos meus clientes. A ideia é bastante simples. Utilizo o título da página criada pelo utilizador e a partir daí crio o URL passando por alguns passos:

  1. Remover toda a pontuação
  2. Colocar todo o URL em minúsculas
  3. Remover espaços, e colocar um hífen
  4. Remover palavras duplicadas
  5. Remover palavras que não são úteis em SEO

O Código PHP

/* Obtém o input, e desfaz-se dos caracteres indesejados */
function gerar_link_seo($input,$substitui = '-',$remover_palavras = true,$array_palavras = array())
{
	//Colocar em minúsculas, remover a pontuação
	$resultado = trim(ereg_replace(' +',' ',preg_replace('/[^a-zA-Z0-9\s]/','',strtolower($input))));

	//Remover as palavras que não ajudam no SEO
	//Coloco as palavras por defeito no remover_palavras(), assim eu não esse array
	if($remover_palavras) { $resultado = remover_palavras($resultado,$substitui,$array_palavras); }

	//Converte os espaços para o que o utilizador quiser
	//Normalmente um hífen ou um underscore
	return str_replace(' ',$substitui,$resultado);
}
function remover_palavras($input,$substitui,$array_palavras = array(),$palavras_unicas = true)
{
	//Separar todas as palavras baseadas em espaços
	$array_entrada = explode(' ',$input);

	//Criar o array de saída
	$resultado = array();

	//Faz-se um loop às palavras, remove-se as palavras indesejadas e mantém-se as que interessam
	foreach($array_entrada as $palavra)
	{
		if(!in_array($palavra,$array_palavras) && ($palavras_unica ? !in_array($palavra,$resultado) : true))
		{
			$resultado[] = $palavra;
		}
	}

	return implode($substitui,$resultado);
}

Explicação

A função aceita 4 variáveis:

1. $input – string – será o URL Amigável, no meu caso, o título da página
2. $substitui – string – o caractér a substituir, o separador, normalmente um hífen ou um underscore
3. $remover_palavras – boolean – remove palavras específicas, as que não fazem diferença em SEO
4. $array_palavras – array – um array de palavras que deve ser removido do URL porque não ajudam em SEO (exemplo: de, e, o, a, etc…)

Exemplo

$palavras_indesejadas = array('a','um','de','o','é','à','com','pode','da','porque','não');
echo gerar_link_seo('Outro dia a Programar com PHP','-',true,$palavras_indesejadas);
//Resultado :: outro-dia-programar-php

echo gerar_link_seo('MooTools outra vez?  Porque não apenas jQuery?','-',true,$palavras_indesejadas);
//Resultado :: mootools-outra-vez-apenas-jquery

echo gerar_link_seo('Um euro poupado é um euro ganho','-',true,$palavras_indesejadas);
//Resultado :: euro-poupado-ganho

Faz um favor a ti mesmo, torna as tuas páginas dinâmicas mais apelativas a motores de pesquisa com URLs amigáveis.


Muito FracoFracoRazoávelBomMuito Bom (Nenhum voto por enquanto)
Loading ... Loading ...
Tags:
 

[PHP] Sintaxe Alternativa

A 11 de Janeiro de 2010, categoria PHP, por Carlos Gonçalves
9

Se já tiveste a agradável experiência de aprofundar o código do WordPress, provavelmente já viste uma sintaxe alternativa nas estruturas de controlo. Um exemplo disso é o seguinte código:

$codigo = 5;
if($codigo == 2):
	echo 'O processo foi bem sucedido.';
else:
	echo 'O processo falhou.';
endif;

O mesmo funciona com um ciclo while, for, foreach e loops, bem como a instrução switch:

$conteudo = array('PHP','jQuery','AJAX');
foreach($conteudo as $conteudo ):
	echo $conteudo;
endforeach;

Devo utilizar esta sintaxe? Se sim quando?

Se deves ou não utilizar esta sintaxe é contigo – depende do teu estilo de programação e o que consideras (ou não) ser legível. Pessoalmente, vejo esta sintaxe a ser muitas vezes utilizada quando são usadas muitas estruturas de controlo dentro do mesmo bloco de código, a sintaxe “end____” torna muito mais legível a estrutura que estás a terminar (do que simplesmente usar “}”). Também costumo ver esta sintaxe utilizada com mais frequência do que a sintaxe tradicional quando o código PHP está embutido no código HTML.

Qual a tua opinião?

Gostaria de saber a tua opinião sobre esta sintaxe.
Comecei a utilizar esta sintaxe cada vez mais… pois, além de ser mais legível, faz mais sentido, pelo menos para mim.
Mas já houve quem me dissesse que não gosta dela, outros que torna o código menos legível.
E tu, o que achas?


Muito FracoFracoRazoávelBomMuito Bom (3 votos, média: 4,00 num total de 5)
Loading ... Loading ...
Tags:
 

[PHP] Funções de Cache e Obter Conteúdo

A 9 de Janeiro de 2010, categoria PHP, por Carlos Gonçalves
2

Uma forma de aumentar a rapidez do teu site de forma exponencial é com recurso a cache de pedidos remotos e internos.
Porquê fazer a mesma solicitação à Base de Dado a cada vez que a página é carregada se a mesma raramente muda?
Criei uma função que verifica se há novos conteúdos na cache e retorna o conteúdo de uma fonte se novos conteúdos não estiverem disponíveis.

A Função PHP

/* obtem o conteudo de um ficheiro se ele existir, caso contrário coloca em cache */
function obter_conteudo($ficheiro,$link,$horas = 24,$fn = '',$fn_args = '')
{
	//variáveis
	$hora_actual = time(); $hora_expira = $horas * 60 * 60; $hora_ficheiro = filemtime($ficheiro);
	//decisões
	if(file_exists($ficheiro) && ($hora_actual - $hora_expira < $hora_ficheiro)) {
		//echo 'retorna a cache do ficheiro';
		return file_get_contents($ficheiro);
	}
	else
	{
		$conteudo = obter_link($link);
		if($fn){ $conteudo = $fn($conteudo,$fn_args); }
		$conteudo.= '<!-- cached:  '.time().'-->';
		file_put_contents($ficheiro,$conteudo);
		//echo 'retorna o novo conteudo de '.$link.':: '.$conteudo;
		return $conteudo;
	}
}

/* obtem o conteudo do link com recurso a curl */
function obter_link($link)
{
	$ch = curl_init();
	curl_setopt($ch,CURLOPT_URL,$link);
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
	curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
	$conteudo = curl_exec($ch);
	curl_close($ch);
	return $conteudo;
}

A minha função obter_conteudo aceita quatro argumentos:

  1. O ficheiro para obter o conteúdo. Se esse ficheiro não existir, o ficheiro é criado e com esse mesmo conteúdo.
  2. O LINK do qual vamos obter o conteúdo se o conteúdo que estiver em cache não for recente.
  3. O nome da função para passar o conteúdo recente.
  4. Os argumentos a passar para o terceiro argumento da função

A função é, naturalmente, muito “primitiva”.
Porém eu gosto da minha função porque ela tanto trata da recuperação e do armazenamento em cache para que eu não precise de repetir o código sempre que queira colocar conteúdo em cache.

Existem muitas (e mais avançadas) classes em PHP para manipulação de cache disponíveis, mas a minha função acima abrange a maior parte das minhas necessidades.

Espero que também te ajude!


Muito FracoFracoRazoávelBomMuito Bom (1 votos, média: 5,00 num total de 5)
Loading ... Loading ...
Tags:
 

Procuras alguma coisa?

Utiliza o formulário abaixo para pesquisares no meu site:


Ainda não encontraste o que procuravas? Deixa um comentário num post ou contacta-me para que te possa ajudar!

Arquivos

Ordenado de forma cronológica...