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/1Neste 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
namespaceWebDevBr\Router;classRouter{private $routes =[];/**
* Adiciona uma nova rota
*
* @param String $route
*/publicfunction 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]
*/publicfunctionparams($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
*/protectedfunction 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 =newWebDevBr\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ódigoProntinho, nosso exemplo agora deve funcionar.Removendo a index.php da URL
ComApache e Htaccess:<IfModule mod_rewrite.c>RewriteEngineOnRewriteCond%{REQUEST_FILENAME}!-f
RewriteRule^ index.php [L]</IfModule>ComNginx:
location /{
try_files $uri $uri//index.php?$args;}
O PHP Built-inServer 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(newDate());</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||void0===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);elseif(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=newXMLHttpRequest;elseif(window.ActiveXObject)try{f=newActiveXObject("Msxml2.XMLHTTP")}catch(k){try{f=newActiveXObject("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....
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/
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);
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;
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)
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.
Compartilhar este post
Link para o post
Compartilhar em outros sites