Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Vinny

[Resolvido] URLs amigáveis (Friendly URLs) com PHP e MySQL

Mensagens Recomendadas

Vinny

Olá pessoal, mas uma vez uma duvida. xD

Estou montando um site de classificados e todas as URLs são amigáveis (Friendly URLs). Porém ainda não consegui transformar as páginas dos anúncios em amigavel. Até o momento o URL é o seguinte:

site.com/index.php?page=anuncio&id=17

Eu quero transformar isso em:

site.com/anuncio-titulo-do-anuncio-postado

Bem, estou com muita duvida em relação a isso, primeiramente qual a melhor forma da transformação?

Primeiramente eu pensei em usar alguma função que capta o titulo do anúncio e substitui espaços e outros com "-", salvar o novo titulo substituido no banco de dados e depois fazer a consulta para retornar com o ID do registro e exibir acessando:

site.com/anuncio-titulo-do-anuncio-postado

Essa é a melhor forma? Qual função eu devo usar para criar o URL amigavel e salvar no banco de dados?

Como devo fazer a exibição para que quando o visitante clicar em site.com/anuncio-titulo-do-anuncio-postado ele seja direcionado para a página do anúncio.

Eu tentei fazer esse metodo mas não deu certo, então apaguei tudo e voltei com o site.com/index.php?page=anuncio&id=17.

Alguma indicação neste caso?

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

Para esse caso aconselho-te a usar a mesma ideia que o IP.B usa.

Usa um URL do tipo:

site.com/idAnuncio-anuncio-titulo-do-anuncio-postado.

Por exemplo:

Para:

site.com/index.php?page=anuncio&id=17

Fica:

site.com/17-anuncio-titulo-do-anuncio-postado.

Parece-te bem? (se sim, já te ajudo mais, se precisares)


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Vinny

Parece bem melhor e ajuda a identificar o id do anuncio. Mais o problema é que eu não consigo fazer a exibição do anúncio acessanndo

site.com/17-anuncio-titulo-do-anuncio-postado

Apenas usando:

site.com/index.php?page=anuncio&id=17

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Vinny

Olá abolinhas,

Agradecido pela dica, mas o .htacees já está configurado. O que pretendo diferente do seu exemplo, é transformar isso:

site.com/index.php?page=anuncio&id=17

Em:

site.com/17-compro-playstation-3/

Nos meus testes eu ainda não adicionei o id do anuncio ao URL, porém eu consigo acessar:

site.com/compro-playstation-3/

Contudo retornar em branco o conteúdo onde deveria aparecer as informações do anuncio.

Eu acho que estou fazendo algo no codigo. Mas ainda tentando encontrar uma solução viavel.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Vinny

Consegui um avanço. Ao acessar: site.com/index.php?page=anuncio&url=compro-playstation-3 e depois tentar site.com/compro-playstation-3 recebo esse errp:

Unknown column 'compro' in 'where clause'

Não to conseguindo o codigo reconhecer o campo compro-playstation-3 do banco de dados, o que fazer? Meu codigo é o seguinte:

<?php
$url = $_GET['url'];
//$id = $_GET['id'];

$sql = "SELECT * FROM anuncios WHERE url = {$url}";
$query = mysql_query($sql, $conn) or die(mysql_error());

while ($array = mysql_fetch_assoc($query))
{
if($array['vendido'] == 1){
echo '<div class="alert alert-error">
		<h4 style="text-align:center;">Atenção!</h4>
			Desculpe, mas o anunciante deste item marcou o anúncio como finalizado. Você não poderá mais interagir neste anúncio. Faça uma busca ou crie um novo anúncio.
	</div>';
}

echo '
<div>
<div class="userphoto">
<span class="label label-success">ANUCIANTE</span><br /><br />
<a href="http://facebook.com/'.$array['facebook'].'/"><img class="img-polaroid alt="" src="http://graph.facebook.com/'.$array['facebook'].'/picture?type=large" /></a>
	<br /><strong>'.$array['name'].'</strong> <br />
';

if (false === $registerOrLoginNeeded) {

if ($array['username'] === $_SESSION['username'] and $array['vendido'] == 0) {


echo '<br />

		<div class="btn-group">
			<a class="btn btn-small" href="#"><i class="icon-user icon-black"></i> Ações</a>
			<a class="btn btn-small dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span></a>
				<ul class="dropdown-menu">
					<li><a href="#"><i class="icon-pencil"></i> Atualizar</a></li>
					<li class="divider"></li>
				<li><a href="'.$excluir_anuncio.''.$array['id'].'"><i class="icon-trash"></i> Excluir</a></li>
					<li class="divider"></li>
					<li><a href="'.$vendido.''.$array['id'].'"><i class="icon-ban-circle"></i> Marcar como Vendido</a></li>
				</ul>
		</div>';
}
}

echo '</div>

<h3><span class="label label-warning">'.$array['tipo'].'</span> '.$array['titulo'].'</h3>';

if($array['vendido'] == 0){
echo '<div class="pull-right clearfix" id="redes_sociais">
<a href="https://twitter.com/share" class="twitter-share-button" data-url="'.$ver_anuncio.''.$array['id'].'" data-text="'.$array['titulo'].'" data-lang="pt">Tweetar</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<br />
<div class="fb-like" data-href="'.$ver_anuncio.''.$array['id'].'" data-send="false" data-layout="button_count" data-width="150" data-show-faces="false" data-font="verdana"></div>
</div>';
}	

echo '	
<strong>Preço:</strong> R$ '.$array['preco'].' <br />
<strong>Categoria:</strong> '.$array['categoria'].' <br />
<strong>'.$array['data'].'</strong> <br /><br />
<p>'.nl2br($array['descricao']).'</p>
'.$array['url'].'
</div>

<br />
';

if($array['vendido'] == 1){
echo '<div class="alert alert-error">Este anúncio já foi finalizado, você não pode enviar comentário.</div>';
} elseif ($registerOrLoginNeeded === true) {
echo '<div class="alert alert-error">Você deve estar logado para poder enviar comentários neste anúncio.</div>';
} else {
echo '<div class="fb-comments" data-href="'.$ver_anuncio.''.$array['id'].'" data-width="600" data-num-posts="5"></div>';
}

}
?>

Será que preciso mudar na estrutura da tabela para que reconheça todo o campo?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Vinny

HappyHippyHippo, perfeito. Muitoooo obrigado.

Ainda na questão das URLs, como faço para que o url retorne o ID do anuncio, exemplo:

site.com/17-compro-playstation-3/

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

site.com/17-compro-playstation-3/ 
        \/ \----/ \-----------/
        ID  PAGE      URL

RewriteEngine On
RewriteRule ^([^-]*)-([^-]*)-([^-]*)$ /index.php?id=$1&page=$2&url=$3 [L]


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Vinny

Obrigado mas resolvi deixar como:

site.com/anuncio/compro-playstation-3/

Quem sabe eu mude de ideia e coloco o id num futuro.

Deixo meu agradecimento para HappyHippyHippo, abolinhas e brunoais pelas respostas e por me ajudar a resolver este problema. Isto que estava bloqueado os recursos do site, agora o que me resta é finalizar os detalhes. Muito obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.