Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rafa-martin

url amigável

Recommended Posts

pessoal, preciso colocar no meu site url amigável. no entanto, vi alguns exemplos e não entendi como posso fazer quando eu tenho várias páginas php e quando posso ter inúmeros parâmetros.

 

vou dar um exemplo:

- meu site tem vários arquivos php. Pelo que vi em alguns exemplo, tenho que especificar página a página no .htaccess. Isso seria inviável.

- outra coisa, eu posso passar "N" parâmetros via get. e aí tenho que colocar no .htaccess todos? E os parâmetros pode ser que venha da base. E pelo exemplos que vi, no .htaccess estão todos fixos. Fora que posso ter mais de uma parâmetro.

 

o que preciso é, como colocar de uma forma dinâmica as páginas no .htaccess e os parâmetros das páginas?

 

alguém tem um exemplo para passar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ideal é deixar o .htaccess apenas com uma regra: enviar tudo para index.php

 

O PHP é que deveria manipular as rotas.

Veja: http://rberaldo.com.br/urls-amigaveis-sem-htaccess-usando-slim/

 

E parâmetros via GET (Query String) não precisam estar na URL Amigável. Você os buscará por $_GET. Mas evite usá-los, já que está utilizando URLs Amigáveis

Compartilhar este post


Link para o post
Compartilhar em outros sites

então vi um exemplo na net que explica bem e entendi como é feito. porém, fiquei com um dúvida em relação a buscar no base.

 

meu .htaccess

 

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?pg=$1

 

index.php

 

<?php
$atual = (isset($_GET["pg"])) ? $_GET["pg"] : 'home';
$permissao = array('home', 'produto', 'empresa', 'erro');
$pasta = "arquivos";
 
if (substr_count($atual,'/') > 0)
{
$atual = explode('/', $atual);
$pagina = (file_exists("{$pasta}/".$atual["0"].".php") && in_array($atual[0], $permissao)) ? $atual["0"] : "erro";
$id = intval($atual[1]);
}
else
{
$pagina = (file_exists("{$pasta}/".$atual.".php") && in_array($atual, $permissao)) ? $atual : "erro";
$id = 0;
}
/*
if (isset($_GET["pg"]))
{
echo $_GET["pg"];
}
*/
 
require("{$pasta}/{$pagina}.php");
?>

 

veja que no index.php eu tenho a variável $id que recebe intval($atual[1]) que seria o segundo parâmetro. Ou seja, numa página de produtos (produto.php), por exemplo, a url ficaria assim http://localhost:82/url/produto/15. Ou qualquer outro número que eu digita. Aí na minha pagina.php eu apenas o get da variável Id.

 

a minha dúvida vem agora. imagina que eu tenho uma lista de produtos numa página, chamada list_produto.php. quando eu clicar num produto qualquer nessa lista, o valor desse $id deveria ser o id do produto que está na base. como eu atribuo o id do produto na variável $id = intval($atual[1]) para poder pegar o produto exato na pagina produto.php?

 

entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você leu o artigo do Beraldo ?

 

Voltando ao seu script, da maneira como informou no htaccess, você deve passar o ID sempre após a barra.

pagina.php/10/blablalba

E recuperar normalmente com o $_GET['pg']

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu li o arquivo. porém, não posso fazer nenhuma instalação no servidor.

 

o exemplo que vc deu da página "pagina.php/10/blablalba" o número 10 seria meu id do produto. esse id eu defini na index.php em $id = intval($atual[1]), ok?

 

só que esse valor tem que vir no banco de dados. porque, obviamente eu terei códigos diferentes de produto. Defindo o $id intval($atual[1]) só estou dizendo que será meu segundo parâmetro após a barra ("/"). só que esse valor precisa vir do banco. é como exemplo que dei.

 

uma lista de produtos, eu clico em um deles, e aí o parâmetro passado é o $id. vou na base e pego o produto com esse $id e trago as outras informações do produto.

 

entendeu o que preciso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então meu querido... faça o while, e no link você ponta ele assim...

 

 

index.php

while()
{

     print '<a href="pagina.php/'.$id.'/balba">'.$nomeproduto.'</a>';

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu li o arquivo. porém, não posso fazer nenhuma instalação no servidor.

não vai instalar nada no servidor.

Você só vai usar o Composer pra baixar o Slim. Se não quiser usar o Composer, nem precisa. Só baixe o Slim manualmente.

Depois é só fazer o upload dos arquivos pro servidor, sem instalar nada

 

Vai facilitar bastante a sua vida. Mas se preferir ir pelo caminho mais longo e usar o seu método atual, ok também. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

na minha lista de produtos criei um link para direcionar para a página de produtos para eu usar em outro select. só que quando clico no link redireciona para a página http://localhost:82/url/list_produto/produto.php?id=1. o correto seria redirecionar para a pagina produto.php sendo assim: http://localhost:82/url/produto/1/

 

segue minha página de listagem de produto.

 

 

<?php
$link = mysqli_connect("localhost","root","","test") or die("Error " . mysqli_error($link)); 
 
$query = "SELECT * FROM tabela" or die("Error in the consult.." . mysqli_error($link)); 
 
//execute the query. 
 
$result = $link->query($query); 
 
//display information: 
 
while($row = mysqli_fetch_array($result)) 
{ 
  //echo $row["nome"] . "<br>"; 
  
  $id_produto = $row["id"];
  $nome = $row["nome"];
  
  
  echo $nome .  ' <a  href='produto.php?id=.$id_produto.>teste</a>' .  "<br>";
} 
 
 
mysqli_close($link);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

então o problema de colocar assim é que monta um link errado e aí redireciona para uma página não existente. o link que monta é ""http://localhost:82/url/produto/1/" e aí como meus arquivos php estão dentro de um pasta chamada url e meu index.php está um diretório pra trás então resolvi o problema dessa forma: print '<a href="/url/produto/'.$id_produto.'/">'.$nome.'</a> <br>';

 

uma outra dúvida que surgiu: no meu index.php eu listo as paginas que tem permissão de entrar pela url amigável

 

 

$permissao = array('home', 'produto', 'empresa', 'erro', 'list_produto');

 

e depois faço o if

 

 

if (substr_count($atual,'/') > 0)
{
$atual = explode('/', $atual);
$pagina = (file_exists("{$pasta}/".$atual["0"].".php") && in_array($atual[0], $permissao)) ? $atual["0"] : "erro";
$id = intval($atual[1]);
}
else
{
$pagina = (file_exists("{$pasta}/".$atual.".php") && in_array($atual, $permissao)) ? $atual : "erro";
$id = 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.