Ir para conteúdo

POWERED BY:

Arquivado

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

Jack Oliveira

COMO MONTAR A URL AMIGAVEL NO LUGAR CERTO

Recommended Posts

                                                 OLA PESSOAL
 

ALGUEM AI PODERIA ME DAR UMA EXPLICAÇÃO BEM SIMPLES E FACIL DE MIM

COMPREENDER DE COMO FAZER A URL AMIGAVEL PARA ESTE MEU SISTEMA

 A URL DELE ESTA :

minhaloja.com/produtos/catalogo.php?id=200

quero que ele fica assim

minhaloja.com/produtos/HD-SAMSUNG-500-GB    

 

        OU UM DESTE DOIS

minhaloja.com/produtos/HD-SAMSUNG-500-GB.html

minhaloja.com/produtos/200/HD-SAMSUNG-500-GB

 

eu ja olhei varios tuturial mais aind fiquei meio perdido ou seja perdido de como montar eles em cada parte, deste do CLICAR NA IMAGEM E DIRECIONAR ELE PARA A PAGINA Q ESTA O catalogo.php para gera a  URL AMIVAGEL

//////////////////////////////////////////////////////////////////////////////////////////

PEGUEI ESTA BASE AQUI DA INTERNET   FIZ DO JEITO Q FALOU AI MAIS AI DAVA ERRO NO ARQUIVO

CATALOGO.PHP 

EU MUDAVA AS FORMA  AI APARECIA ERROS NAS LINHAS E O CATALOGO VAZIO

 

 

ME DIZER AI COMO FAZER ELE E ELE FUNCIONAR SEM ERRO NO E NAO VIM AS TABELAS VAZIAS DB...

// ----------- URL AMIVAGEL DA INTERNET ---- ESTE E O LINK DA PAGINA https://www.webdevbr.com.br/urls-amigaveis-com-php-htaccess-apache-e-nginx //////////////

//configuro os formatos de URL que eu quero
$route->add('/{prefix}/{modulo}{acao}/{id}');
$route->add('/{modulo}/{id}/{titulo}');
$route->add('/{titulo}');

//pego as informações da URL
$params = $route->params($url);

if (isset($params['prefix']) and $params['prefix'] == 'admin') {
    //logica para carregar a administração do site
    //posso usar includes ou autoload, ou o que quiser
    include 'carrega_admin.php';
    die();
}

$modulos_disponiveis = [
    'categorias',
    'paginas',
    'usuarios'
];

if (isset($params['modulo']) and in_array($params['modulo'], $modulos)) {
    //logica para carregar um modulo do site
    //(listagem de categorias por exemplo)
    include 'carrega_modulo.php';
    die();
}

if (isset($params['titulo'])) {
    //logica para carregar paginas do site
    //(página de contato por exemplo)
    include 'carrega_pagina.php';
    die();
}

echo 'Página não encontrada';


Este seria um arquivo "bootstrap" do site, ou seja, iria carregar a aplicação, cada item entre chaves ({}) nas rotas se torna um nó no array $params, assim na linha abaixo:


$route->add('/{prefix}/{modulo}{acao}/{id}');
Teriamos um array neste formato:

$params['prefix'];
$params['modulo'];
$params['acao'];
$params['id'];
Muito mais simples de trabalhar não?

O $SERVER['PATHINFO']
Pra encontrar a URL vamos usar $_SERVER['PATH_INFO'] em vez de GET, no exemplo acima teriamos:

$url = '/';
if (isset($_SERVER['PATH_INFO']))
    $url = $_SERVER['PATH_INFO'];

//configuro os formatos de URL que eu quero
$route->add('/{prefix}/{modulo}{acao}/{id}');
$route->add('/{modulo}/{id}/{titulo}');
$route->add('/{titulo}');


//pego as informações da URL
$params = $route->params($url);

//restante do código
A variável $_SERVER['PATH_INFO'] retorna todo valor digitado usando '/' após um arquivo PHP, por exemplo:

www.seusite.com.br/index.php/categorias/1
Neste caso teriamos /categorias/1 como valor de $_SERVER['PATH_INFO'], acontece que se nada for passado a variável não existe, por isso passei um valor padrão $url = '/'; e verifiquei a existência com isset() logo na sequência.

Mas e essa classe $route, como ela funciona?

Trabalhando com as rotas
Eu criei um arquivo em src/Router/Router.php com o seguinte conteúdo:



<?php

namespace WebDevBr\Router;

class Router
{
    private $routes = [];

    /**
     * Adiciona uma nova rota
     *
     * @param String $route
     */
    public function add($route)
    {
        preg_match_all('{\{[a-z][a-zA-Z0-9_]*}', $route, $variable);
        preg_match_all('{[^\{][a-z][a-zA-Z0-9_]*}', $route, $static);

        $variable[0] = $this->trimArray('{', $variable[0]);
        $static[0] = $this->trimArray('/', $static[0]);

        $this->routes[$route]['variable'] = $variable[0];
        $this->routes[$route]['static']['order'] = $static[0];
        $this->routes[$route]['static']['values'] = array_diff($static[0], $variable[0]);
    }

    /**
     * Retorna os parâmetros configurados da rota
     * Ou null caso não seja encontrada uma rota válida
     *
     * @param  String $url [description]
     */
    public function params($url)
    {
        $result = [];
        $clean = ltrim ($url, '/');
        $params = explode('/', $clean);

        foreach ($this->routes  as $route) {
            $params = array_diff($params, $route['static']['values']);
            if (count($params) == count($route['variable'])) {
                return array_combine($route['variable'], $params);
            }
        }
    }

    /**
     * Remove um ou mais caracteres de strings em um array
     * em um ambiente ideal isso seria um trait ou arquivo
     * de funções
     */
    protected function trimArray($str, $data)
    {
        $array_fill = array_fill(0, count($data), $str);

        return array_map(
            function($v, $str) {return ltrim($v, $str);},
            $data,
            $array_fill
        );
    }
}

Tentei manter o código o mais limpo possível, Nosso exemplo completo com o carregamento do nosso novo objeto.

//Carrego minha classe Router
include __DIR__.'src/Router/Router.php';
$route = new WebDevBr\Router\Router;

$url = '/';
if (isset($_SERVER['PATH_INFO']))
    $url = $_SERVER['PATH_INFO'];

//configuro os formatos de URL que eu quero
$route->add('/{prefix}/{modulo}{acao}/{id}');
$route->add('/{modulo}/{id}/{titulo}');
$route->add('/{titulo}');


//pego as informações da URL
$params = $route->params($url);

//restante do código
Prontinho, nosso exemplo agora deve funcionar.

Removendo a index.php da URL
Com Apache e Htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
Com Nginx:

location / {
    try_files $uri $uri/ /index.php?$args;
}

O PHP Built-in Server não precisa de nenhuma configuração especial, ele já trabalha corretamente se omitirmos a index.php da rota.

               // --------- ESTE É SYS.PHP QUERO SABER ONDE QUE EU COLOCO AQUI PARA PUXAR A URL E O QUE POR A MAIS AQUI OU MUDAR ETC..--------- /////////

 

      <!--- ENVIANDO OS DADOS DA TABELA PARA O CATALOGO.PHP --->
<?php
    require_once 'database/DB.php';
    require_once 'database/class.php';

    $con = new conexao();
    $con->connect();
    $getId = $_GET['id'];
    if($getId){ //se existir recupera os dados e tras os campos preenchidos
        $consulta = mysql_query("SELECT * FROM produtos WHERE  id = + $getId");
        $dados = mysql_fetch_array($consulta);

//Busca na tabela o numero de vezes que a página ja foi visitada
$busca = "Select * FROM produtos WHERE id = {$getId}";
$exe = mysql_query($busca);

$resultado = (mysql_fetch_array($exe));

//Pega o numero de visistas que consta na tabela, adiciona mais um e atualiza
$visitantes = $resultado['visitas'] + 1;
$altera = "UPDATE produtos SET visitas = '{$visitantes}' WHERE id = '{$getId}'";
$exe1 = mysql_query($altera);

//Faz uma nova busca e retorna o numero de visitas depois da atualização
$exe = mysql_query($busca);
$total = (mysql_fetch_array($exe));
$visitas = $total['visitas'];

    }

       if(isset ($_POST['editar'])){ // Edita
        $nome = $_POST['nome']; // NAME
        $telefone = $_POST['telefone']; // NAME
		$facebook = $_POST['facebook']; // NAME
		$cargo = $_POST['cargo']; // NAME
		$valor = $_POST['valor'];
		$data1 = $_POST['data1'];
		$categoria = $_POST['categoria'];
		$post = $_POST['post'];
		$cliente = $_POST['cliente']; // NAME
		$imagem = $_POST['imagem'];
        $visitas = $_POST['visitas'];
		$mapa = $_POST['mapa'];
		$descricao = $_POST['descricao'];
        $crud = new crud('produtos'); // instancia classe com as operaçoes crud, passando o nome da tabela como parametro
		$crud->atualizar("nome='$nome',telefone='$telefone',facebook='$facebook',cargo='$cargo',valor='$valor',visitas='$visitas',data1='$data1',categoria='$categoria',post='$post',cliente='$cliente',imagem='$imagem',mapa='$mapa',descricao='$descricao'", "id='$getId'");


    }


?>

// ------ ESTE É O DO  CATALOGO.PHP ----- QUE ESTA A ASSIM minhaloja.com/produtos/catalogo.php?id=200
E QUERO QUE QUANDO CLICAR NA IMAGEM OU ALGUM BOTAO PARA DIRECIONAR PARA ESTE CATALOGO.PHP e ela ficar assim

minhaloja.com/produtos/HD-SAMSUNG-500-GB ------- ///////

 

                OBS: NÃO COLOQUEI O CODIGO COMPLETO ATE O FINAL PRA NAO FICAR MUITO LOGO Q JA ESTA

<!-- ESTE AQUI ONDE RECEBE TODOS OS DADOS DA TABELA SQL PARA O CATALOGO - O QUE TENHO QUE MUDAR AQUI TBM? -->
<?php require_once 'assest/public/sys.php'; ?>

<!DOCTYPE html>
<html lang=pt-br class=no-js>
<head>
<meta http-equiv=content-type content="text/html; charset=UTF-8">
<meta name=theme-color content="#bf0e0e"/>
<meta charset=utf-8>
<meta name=language content=pt-br>
<meta name=viewport content="width=device-width, initial-scale=1, maximum-scale=1">
<title><?php echo $dados["nome"]; ?></title>
<meta name=description content="<?php echo $dados["nome"]; ?>"/>
<meta name=keywords content="<?php echo $dados["cargo"]; ?>"/>
<meta property=og:site_name content="notícias"/>
<meta property=og:type content=article />
<meta content="<?php echo DadosSession('base_url'); ?>produtos/catalogo.php?id=<?php echo $dados["id"]; ?>" property=og:url>
<meta content="<?php echo DadosSession('base_url'); ?>img/cat/<?php echo $dados["imagem"]; ?>" property=og:image>
<meta content="<?php echo $dados["nome"]; ?>" property=og:title>
<meta content="<?php echo $dados["descricao"]; ?>" property=og:description>
<script type='text/javascript'>
  window.mod_pagespeed_start = Number(new Date());
  </script>
  <link href="<?php echo DadosSession('base_url'); ?>img/cat/<?php echo $dados["imagem"]; ?>" rel=image_src />
<meta property=og:image:type content="image/jpeg">
<meta property=og:image:width content=400>
<meta property=og:image:height content=400>
  <link rel=stylesheet href="https://fonts.googleapis.com/icon?family=Material+Icons"/>
  <link rel=stylesheet href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
  <link href="css/bootstrap.min.css" rel=stylesheet>
  <link href="css/owl.carousel.css" rel=stylesheet>
  <link href="css/owl.theme.default.min.css" rel=stylesheet>
  <link href="css/animate.min.css" rel=stylesheet>
  <link href="css/animsition.css" rel=stylesheet>
  <link rel=stylesheet type="text/css" href="css/gridGallery.css">
  <link rel=stylesheet type="text/css" href="css/uploadify.css">
  <link href="css/plugins.min.css" rel=stylesheet>
  <link href="css/material-kit.css" rel=stylesheet />
  <link href="css/component.css" rel=stylesheet media=screen>
  <link href="css/style.css" rel=stylesheet>

<link rel="shortcut icon" href="<?php echo DadosSession('base_url'); ?>img/img_site/afc4e973ce.jpg" />
<script type="text/javascript" src="js/ajax_votacao.js"></script>
<script src="js/modernizr.custom.js"></script>
<script src="js/jquery.min.js"></script>
<script src="js/jquery.flexslider.js"></script>
<script src="js/material.min.js"></script>
<script src="js/material-kit.js"></script>
<script src="js/jquery.maskedinput.js"></script>
<script type="text/javascript" src="js/jquery.uploadify.min.js"></script>
<style>
  #menu-topo{background-color:#eee}#menu-topo li a{color:#333}.top-wrap,.sb-icon-search,.sb-search.sb-search-open .sb-icon-search,.no-js .sb-search .sb-icon-search{background-color:#bf0e0e}#menu-topo .sociais a{color:#ccc}.cor-bg{background:#c62d2d}.cor{color:#c62d2d}.busca{background:url(<?php echo DadosSession('base_url'); ?>/arquivos/template/794a3559ef930d8b7900a9c4b3c894eb.jpg) #EEE no-repeat center center / cover}
  .busca-interna{background:url(<?php echo DadosSession('base_url'); ?>/img/img_site/fundo.png) #EEE no-repeat center center / cover}.nav>li>a:focus,.nav>li>a:hover{background-color:#333}#footer{background-color:#222}#footer
  .btmFooter{background-color:#181818;color:#7f7f7f}#footerapp{background-color:#181818;position:absolute;bottom:0;left:0;right:0;padding:30px}.footer li a{#7f7f7f}</style>
</head>
<body id=top>

<div class=scroller>
<div class=scroller-inner>
<header>

<div class=col-md-1>             <li>

<div class="col-md-2 pull-right row">

      <div id=categ>
               <ul class=menu>
                      <li class=dropdown>

       </div>
        </div>
         </div>
</div>


<!--PC-->


<div class="header ocultar">
              <div class=container>
                  <div class=row>


                      <div class="col-sm-4 ocultar">
                          <a href="<?php echo DadosSession('base_url'); ?>">
                                <script data-pagespeed-no-defer>//<![CDATA[
(function(){var g=this;function h(b,d){var a=b.split("."),c=g;a[0]in c||!c.execScript||c.execScript("var "+a[0]);for(var e;a.length&&(e=a.shift());)a.length||void 0===d?c[e]?c=c[e]:c=c[e]={}:c[e]=d};function l(b){var d=b.length;if(0<d){for(var a=Array(d),c=0;c<d;c++)a[c]=b[c];return a}return[]};function m(b){var d=window;if(d.addEventListener)d.addEventListener("load",b,!1);else if(d.attachEvent)d.attachEvent("onload",b);else{var a=d.onload;d.onload=function(){b.call(this);a&&a.call(this)}}};var n;function p(b,d,a,c,e){this.h=b;this.j=d;this.l=a;this.f=e;this.g={height:window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,width:window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth};this.i=c;this.b={};this.a=[];this.c={}}function q(b,d){var a,c,e=d.getAttribute("data-pagespeed-url-hash");if(a=e&&!(e in b.c))if(0>=d.offsetWidth&&0>=d.offsetHeight)a=!1;else{c=d.getBoundingClientRect();var f=document.body;a=c.top+("pageYOffset"in window?window.pageYOffset:(document.documentElement||f.parentNode||f).scrollTop);c=c.left+("pageXOffset"in window?window.pageXOffset:(document.documentElement||f.parentNode||f).scrollLeft);f=a.toString()+","+c;b.b.hasOwnProperty(f)?a=!1:(b.b[f]=!0,a=a<=b.g.height&&c<=b.g.width)}a&&(b.a.push(e),b.c[e]=!0)}p.prototype.checkImageForCriticality=function(b){b.getBoundingClientRect&&q(this,b)};h("pagespeed.CriticalImages.checkImageForCriticality",function(b){n.checkImageForCriticality(b)});h("pagespeed.CriticalImages.checkCriticalImages",function(){r(n)});function r(b){b.b={};for(var d=["IMG","INPUT"],a=[],c=0;c<d.length;++c)a=a.concat(l(document.getElementsByTagName(d[c])));if(0!=a.length&&a[0].getBoundingClientRect){for(c=0;d=a[c];++c)q(b,d);a="oh="+b.l;b.f&&(a+="&n="+b.f);if(d=0!=b.a.length)for(a+="&ci="+encodeURIComponent(b.a[0]),c=1;c<b.a.length;++c){var e=","+encodeURIComponent(b.a[c]);131072>=a.length+e.length&&(a+=e)}b.i&&(e="&rd="+encodeURIComponent(JSON.stringify(t())),131072>=a.length+e.length&&(a+=e),d=!0);u=a;if(d){c=b.h;b=b.j;var f;if(window.XMLHttpRequest)f=new XMLHttpRequest;else if(window.ActiveXObject)try{f=new ActiveXObject("Msxml2.XMLHTTP")}catch(k){try{f=new ActiveXObject("Microsoft.XMLHTTP")}catch(v){}}f&&(f.open("POST",c+(-1==c.indexOf("?")?"?":"&")+"url="+encodeURIComponent(b)),f.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),f.send(a))}}}function t(){var b={},d=document.getElementsByTagName("IMG");if(0==d.length)return{};var a=d[0];if(!("naturalWidth"in a&&"naturalHeight"in a))return{};for(var c=0;a=d[c];++c){var e=a.getAttribute("data-pagespeed-url-hash");e&&(!(e in b)&&0<a.width&&0<a.height&&0<a.naturalWidth&&0<a.naturalHeight||e in b&&a.width>=b[e].o&&a.height>=b[e].m)&&(b[e]={rw:a.width,rh:a.height,ow:a.naturalWidth,oh:a.naturalHeight})}return b}var u="";h("pagespeed.CriticalImages.getBeaconData",function(){return u});h("pagespeed.CriticalImages.Run",function(b,d,a,c,e,f){var k=new p(b,d,a,e,f);n=k;c&&m(function(){window.setTimeout(function(){r(k)},0)})});})();pagespeed.CriticalImages.Run('/mod_pagespeed_beacon','<?php echo DadosSession('base_url'); ?>produtos/catalogo.php?id=<?php echo $dados["id"];?>','yW9MLzz7Mf',true,false,'CnL4BB8euv4');
//]]></script><img src="<?php echo DadosSession('base_url'); ?>img/<?php echo $dados["imagem"]; ?>" data-pagespeed-url-hash=1547057666 onload="pagespeed.CriticalImages.checkImageForCriticality(this);"/>
                        </a>
                      </div>


                      <div class="col-sm-8 banner" align=right>

<div class=row>
<div class=col-md-12>
<div class=flexslider>
<ul class=slides>

                         

<!-- ESTE AQUI QUE TRAZ A BUSCA DA TABELA E NA PESQUISA - ESTE AQUI É O QUE 
LINK PARA O CATALOGO 
<a href='/produtos/catalogo.php?id=<?php echo $dados['id']; ?></a></font><small>Ver Produto Completo</small></strong></font></div></td>

BOM A PERGUNTA TBM SERIA O QUE TENHO QUE POR AQUI TBM PARA QUE ELA LEVA  ESTE LINK JA COM A URL QUE EU QUERO -->
 


<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
<body bgcolor="#FFFFFF">
<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/pt_BR/sdk.js#xfbml=1&version=v2.0";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<?php
$host = "localhost"; // Host do Mysql
$user = "root"; // Usuário do Mysql
$pass = ""; // Senha do Mysql
$banco = "produtos"; // Nome do Banco no Mysql
$pesquisar = $_POST['pesquisar'];
$con = mysql_connect($host,$user,$pass);
$db = mysql_select_db($banco,$con);
mysql_query("SET NAMES 'utf8'");
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_results=utf8');
$sql = "SELECT* FROM produtos WHERE nome LIKE '%$pesquisar%' OR valor LIKE '%$pesquisar%' order by id_categoria LIMIT 60";
$resultado = mysql_query($sql)or die (mysql_error());
while ($dados=mysql_fetch_array($resultado)) {
?>
<table width="585" border="0" align="center" bgcolor="#FFFFFF">
  <tr bgcolor="#FFFFFF">
    <td width="31" height="27"><div align="left"><strong><font color="#FF0000" size="4"><img src="img/ico.png" width="30" height="25" border="0" align="top"></font></strong></div></td>
    <td width="370"><strong><font color="#FF0000" size="4" face="Arial, Helvetica, sans-serif"> 
     <?php echo $dados['nome']; ?>
    </font></strong></td>
    <td width="172" rowspan="5" background="img/fundo2.jpg" bgcolor="#F7F7F7"><div align="center"><strong><font color="#FF0000" size="4"><a href=/produtos/catalago.php?id=<?php echo $dados['id']; ?> target="_blank"><img src="<?php echo $dados['imagem']; ?>" alt="" width="172" height="150" border="0" align="top"></a></font></strong></div></td>
  </tr>
  <tr bgcolor="#FFFFFF">
    <td height="27" valign="middle">      <div align="left"><strong><font color="#FF0000" size="5" face="Verdana, Arial, Helvetica, sans-serif"><img src="img/telefonesemfundo.png" width="30" height="25"> </font> </strong>
    </div></td>
    <td height="27" valign="middle"><table width="370" border="0">
        <tr>
          <td width="245" bgcolor="#F4F4F4"><strong><font color="#009500" size="2,5" face="Verdana, Arial, Helvetica, sans-serif"> <?php echo $dados['valor']; ?></font> </strong></td>
          <td width="115" height="25" background="img/detalhes.png"><div align="left">&nbsp; &nbsp; &nbsp; <font size="2"><strong><font color="#FFFFFF" face="Verdana, Arial, Helvetica, sans-serif"><a href='/produtos/catalogo.php?id=<?php echo $dados['id']; ?></a></font><small>Ver Produto Completo</small></strong></font></div></td>
        </tr>
      </table></td>
</table>
<hr width="550" color="#FF0000">
</table>
<?php }?>
<div align="center"></div>

                               ACHO QUE CONSEGUEM ENTENDER AI CERTO?              

 

 

    DESDE JÁ A AGRADEÇO AI

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.