Ir para conteúdo

Arquivado

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

  • 0
Jack Oliveira

URL AMIGAVÉL

Pergunta

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
  MAIS NAO CONEGUE MONTAR ELE CERTO SEMPRE DA ERRO ELE NAO PUXA NADA DO 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 --------- /////////
      <!--- 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 ------- ///////

<!-- CHAMANDO OS DADOS DA TABELA PARA O CATALOGO -->
<?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>
  
  
  
  
  DESTE JÁ FICO GRATO A TODOS....

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

0 respostas a esta questão

Recommended Posts

Até agora não há respostas para essa pergunta


  • Conteúdo Similar

    • Por Alessandro Bodão
      Boa noite irmandade!
       
      Ando reparando de alguns anos pra cá, uma forte tendência em que sites bem dinâmicos e interativos transitam de uma página pra outra sem que a outra página se quer passe por um processo de carregamento, você clica, simplesmente acontece algumas transições nos elementos da página, e de repente, você está em outra página, outro url. De forma suave, nada é carregado, apenas algo acontece e você já está em outra página.
       
      Gostaria de saber como isso é feito pra aplicar em um site que estou desenvolvendo, se é algum framework, alguma ferramenta além do JavaScript...
       
      Trouxe um belo exemplo: https://www.traffic.productions/
       
      Se você chegou até aqui, agradeço desde já!
    • Por Fernando Rafael
      Bom dia, estou baixando arquivos que estão em uma hospedagem própria para serem acessados por um aplicativo que estou desenvolvendo (consigo fazer normalmente utilizando os comandos citado mais a baixo), porém os arquivos ficam salvos na pasta padrão de DOWNLOADS do Android, minha intenção não é ficar acumulando estes arquivos no aparelho, ou esperar que o usuário exclua manualmente, gostaria em salva-los em uma pasta interna do aplicativo para que seja possível excluir automaticamente pelo próprio aplicativo, já tentei como alternativa excluir esses arquivos da pasta DOWNLOADS, mas não consegui...
       
      Segue o código que estou usando para baixar os arquivos, queria adaptar para baixar direto na pasta interna do aplicativo, ou como alternativa caso isso não seja possível, conseguir excluir esses arquivos da pasta DOWNLOADS do Android...
       
      String url = "https://www.site.com/arquivo.pdf"; //Arquivo que vou baixar DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); request.setDescription("Alguma descrição"); request.setTitle("Algum titulo"); //A notificação de conslusão só esta disponível a partir da API 11 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { request.allowScanningByMediaScanner(); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); } //Salvando o arquivo no diretório de Downloads request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "arquivo.pdf"); DownloadManager manager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); manager.enqueue(request);  
    • Por AlexandreHenrique
      Olá pessoal. preciso de uma ajuda com o meu projeto de upload.
      O projeto de upload roda no IIS + Php;
      Tenho um script que ta enviando  o arquivo para o diretório correto.
      O problema é que ao tentar acessar esse arquivo via URL, o anexo não abre  e exibe a mensagem abaixo.
       

      Notei que o arquivo ao cair no DIR, ele entra sem permissões (vi em propriedades), se eu editar o mesmo alterando as permissões, ele carrega pela url do meu site.
      Quero que o arquivo enviado pelo script caia no DIR correta com as devidas permissões pra eu poder ler no navegador via URL;
       
      Já tentei resolver de toda forma mas nao tive sucesso;.
      No Apache isso é mais simples, mas no IIS ta complicado;
       
       
       
      Alguem pode me dá uma dica?
    • Por iveusername
      Preciso de ajuda com o serviço de url de suporte ao vivo. Quando recebo um url de Umuly.com no Postman, outras pessoas não devem ter permissão para bater papo usando esse url. Supondo que 10.000 pessoas tenham um bate-papo ao vivo, o serviço deve criar 10.000 novos urls. Qual é a razão por trás disso? Como o serviço gera novos urls para cada um? (Em linguagem .NET Core)
    • Por Ak_Ray
      Pessoal, a pouco tempo troquei o xampp pelo php direto na máquina, o problema é que quando inicio o servidor o require nem o include funcionam. Acredito que o problema seja no php.ini, já tentei fazer diversas alterações, mas nenhuma funcionou.
      Linha onde acredito que esteja o problema :
      ; UNIX: “/path1:/path2”
      include_path = “.:/php/includes”
      ;
      ; Windows: “\path1;\path2”
      ;include_path = “.;c:\php\includes”
      Essa é a configuração padrão, apenas fiz uma alteração abaixo da linha “Unix” tirando o ';", já que no arquivo de php.ini do xampp estava assim. Mesmo assim não funciona =/
      Diretório onde esta a pasta php:
      C:\php
      Ps: tenho certeza que estou chamando o arquivo corretamente, tanto que com o Xampp funcionava normalmente.
×

Informação importante

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