uiLhian 1 Denunciar post Postado Outubro 28, 2013 bom estou tendo problemas com a paginação, pois se eu entro na pagina por exemplo: http://localhost/portifolio - funciona normal mas quando vou "paginar" a paginação não funciona. fica assim: http://localhost/portifolio?p=2 .htaccess <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?url=$1&p=$2 </IfModule> index.php <?php $url = (isset($_GET['url'])) ? $_GET['url'] : "home"; $file = "$url.php"; if(file_exists($file)){ include($file); } else{ require_once("E404.php"); } Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Outubro 28, 2013 RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?url=$1&p=$2 De onde está vindo o $2? Você só tem uma regra ai... e ela só vai pegar o que vem antes do ? Use o QSA, isso vai adicionar a querystring que você está passando direto na URL RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?url=$1 [QSA] Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Outubro 28, 2013 hummm... mas e pra transforma http://localhost/portifolio?p=2 em http://localhost/portifolio/2 ? pois agora pagina mas fica http://localhost/portifolio?p=2 Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Outubro 28, 2013 É só alterar a expressão regular para contemplar a parte da paginação... Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Outubro 28, 2013 certo... vou pesquisar e ver como posso estar arrumando isso... valeu! :( Compartilhar este post Link para o post Compartilhar em outros sites
Bruno RafaeI 3 Denunciar post Postado Outubro 28, 2013 Amigo pra que complicar tanto a paginação? seguinte... arquivo .htaccess Options +FollowSymLinks AddDefaultCharset UTF-8 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] </IfModule> veja que a nossa variável que irá receber os valores enviados por get é a "url" beleza. Agora é preciso criar uma classe pra tratar essa paginação, exemplo: <?php class url{ public static function verificar_url($url){ if (substr_count($url, DIRECTORY_SEPARATOR) > 0): $explode_url = explode(DIRECTORY_SEPARATOR, $url); foreach ($explode_url as $u) : if(is_file('inc/'.$u.'.php')): require_once 'inc/'.$u.'.php'; endif; endforeach; else: if (is_file('inc/'.$url.'.php')): require_once 'inc/'.$url.'.php'; else: require_once "inc/erro404.php"; endif; endif; } } ?> suponhamos que todas as páginas que você queira chamar esteja em uma pasta chamada "inc", se não basta tirar o "inc/" ou substituir pelo o nome do diretório que estão as páginas! Você precisará agora configurar o APACHE, terá que liberar nele o module_rewrite feito isso, ainda no apache, você terá que procurar por esta linha: <Directory /> AllowOverride All Require all denied </Directory> se estiver "AllowOverride None" mude para "All", basta reiniciar o apache. Agora você precisa chamar a sua classe no corpo da sua página: 1º - Suponhamos que você tenha fatiado o seu layout em: header.php content.php footer.php e na página index.php você está dando um require/include nestas páginas, então ficaria assim: <php include_once('class/url.php'); //suponhamos que a classe que trata as urls esteja em um diretório chamado "class". $amigavel = new url(); ?> <?php require('header.php'); ?> <?php isset($_GET['url']) ? $amigavel->verificar_url($_GET['url']) : require_once 'content.php'; ?> <?php require('rodape.php'); ?> 2º - Não tenha fatiado nada... é só chamar a classe no corpo do seu site, por exemplo: <body> <?php include_once('class/url.php'); $amigavel = new url(); isset($_GET['url']) ? $amigavel->verificar_url($_GET['url']) : require_once 'index.php'; ?> Pronto! espero ter ajudado, me perdoe por não lhe dá mais detalhes sobre a funcionalidade de cada script! mas é bastante intuitivo, basta olhar para o código que será fácil de entender! Att. Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Outubro 29, 2013 Bruno Rafael segui o que você falou mas ele continua http://localhost/portifolio?p=2 ao invez de http://localhost/portifolio/2 segue o que fiz abaixo: .htaccess Options +FollowSymLinks AddDefaultCharset UTF-8 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] </IfModule> index.php <?php class url { public static function verificar_url($url) { if (substr_count($url, DIRECTORY_SEPARATOR) > 0): $explode_url = explode(DIRECTORY_SEPARATOR, $url); foreach ($explode_url as $u) : if(is_file($u.'.php')): require_once $u.'.php'; endif; endforeach; else: if (is_file($url.'.php')): require_once $url.'.php'; else: require_once "E404.php"; endif; endif; } } $amigavel = new url(); isset($_GET['url']) ? $amigavel->verificar_url($_GET['url']) : require_once 'home.php'; ?> a query da paginação: (portifolio.php) <?php $pagination = new PDO_Pagination( $connection ); $pagination->setSQL("SELECT obraID,obraBAIRRO FROM serviços ORDER BY obraID DESC"); $pagination->setPaginator( 'p' ); $results = $connection->query( $pagination->getSQL() ); IF ($pagination->getTotalOfResults() > 0) { foreach ($results->fetchAll(PDO::FETCH_OBJ) as $o) { $queryFOTOS = $connection->query(sprintf("SELECT fotoNOME FROM fotos WHERE fotoOBRAID = '%s' ORDER BY fotoCAPA ASC", $o->obraID )); IF ($queryFOTOS->rowCount() !== 0) { $f = $queryFOTOS->fetch(PDO::FETCH_OBJ); ?> a function que uso pra paginar public function printNavigationBar() { $current_page = $this->getCurrentPage(); $total_of_pages = $this->getTotalOfPages(); $paginator = $this->getPaginator(); $query_string = $this->rebuildQueryString( $paginator ); $range = $this->getRange(); if($this->getTotalOfResults() > 0) { print "<ul class=\"pagination pagination-sm titill pull-right\">"; if ( $current_page > 1 ) { print "<li><a href=\"?" . $paginator . "=1" . $query_string . "\" class=\"azu\">primeira</a></li> "; $previous = $current_page - 1; } for ( $x = ( $current_page - $range ); $x < ( ( $current_page + $range ) + 1 ); $x++ ) { if ( ( $x > 0 ) && ( $x <= $total_of_pages ) ) { if ( $x == $current_page ) { print "<li class=\"active\"><span>$x <span class=\"sr-only\">(ativo)</span></span></li>"; } else { print "<li><a href=\"?" . $paginator . "=" . $x . $query_string . "\">$x</a></li> "; } } } if ( $current_page != $total_of_pages ) { $next = $current_page + 1; print "<li><a href=\"?" . $paginator . "=" . $total_of_pages . $query_string . "\" class=\"red\">última</a></li>"; } print '</ul>'; } } Compartilhar este post Link para o post Compartilhar em outros sites
Bruno RafaeI 3 Denunciar post Postado Outubro 29, 2013 no script que te passei você teria que ter este diretório "portifolio/2/index.php" se é que me entende, assim você teria na sua url "http://seusite.com/portifolio/2" , quando fosse acessar a index do mesmo, entendeu?! Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Outubro 29, 2013 aqui você fala ? <?php class url { public static function verificar_url($url) { if (substr_count($url, DIRECTORY_SEPARATOR) > 0): $explode_url = explode(DIRECTORY_SEPARATOR, $url); foreach ($explode_url as $u) : if(is_file($u.'.php')): require_once $u.'.php'; endif; endforeach; else: if (is_file($url.'.php')): require_once $url.'.php'; else: require_once "E404.php"; endif; endif; } } $amigavel = new url(); isset($_GET['url']) ? $amigavel->verificar_url($_GET['url']) : require_once 'home.php'; ?> else: if (is_file($url.'.php')): require_once $url.'.php'; ? desculpa mas é que não manjo mesmo :( Compartilhar este post Link para o post Compartilhar em outros sites
Bruno RafaeI 3 Denunciar post Postado Outubro 29, 2013 relaxa, é assim mesmo... este script ai vai verificar se o diretorio e o arquivo existem caso contrário ele irá direcionar a uma pagina de erro, e também se o houver mais de 1 diretorio em questão, ele irá tratá-los. suponha que você tenha um arquivo chamado portifolio.php dentro do seguinte diretorio: /inc/diversos/portifolio.php então a sua URL ficaria assim: http://seusite.com/inc/diversos/portifolio no caso citado por você, você quer que apareça assim: http://seusite.com/portifolio/2 então você teria que ter o arquivo 2.php dentro da sua pasta portifolio. entendeu? quando vc acionasse o link <a href="http://seusite.com/potifolio/2"> então ele irá verificar se este arquivo existe. se não existe ele vai te voltar a pagina de erro.php que você criou! PS: Eu te sugiro testar primeiramente a URL AMIGAVEL, se estiver funcionando é só você adequar ao seu script de paginação! ^_^ Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Outubro 29, 2013 então funcionando está pois eu fiz os teste aqui /home, /portifolio, /teste me retorno a pagina de erro e tal... tipo o portifolio seria um arquivo portifolio.php que ta na raiz junto com os outros arquivos e esse "?p=2" que me refiro seria a "pagina 2", "pagina 3", "pagina 4" e assim por diante... e gostaria que aparecesse portifolio/2, portifolio/3 etc... ae no caso a alteração teria que ser feita aqui ? public function printNavigationBar() { $current_page = $this->getCurrentPage(); $total_of_pages = $this->getTotalOfPages(); $paginator = $this->getPaginator(); $query_string = $this->rebuildQueryString( $paginator ); $range = $this->getRange(); if($this->getTotalOfResults() > 0) { print "<ul class=\"pagination pagination-sm titill pull-right\">"; if ( $current_page > 1 ) { print "<li><a href=\"?" . $paginator . "=1" . $query_string . "\" class=\"azu\">primeira</a></li> "; $previous = $current_page - 1; } for ( $x = ( $current_page - $range ); $x < ( ( $current_page + $range ) + 1 ); $x++ ) { if ( ( $x > 0 ) && ( $x <= $total_of_pages ) ) { if ( $x == $current_page ) { print "<li class=\"active\"><span>$x <span class=\"sr-only\">(ativo)</span></span></li>"; } else { print "<li><a href=\"?" . $paginator . "=" . $x . $query_string . "\">$x</a></li> "; } } } if ( $current_page != $total_of_pages ) { $next = $current_page + 1; print "<li><a href=\"?" . $paginator . "=" . $total_of_pages . $query_string . "\" class=\"red\">última</a></li>"; } print '</ul>'; } } Compartilhar este post Link para o post Compartilhar em outros sites
Bruno RafaeI 3 Denunciar post Postado Outubro 29, 2013 bom, você teria que ter estes arquivos: 2.php, 3.php, 4.php pra que seja direcionado corretamente na URL, no caso o link não há a necessidade de você por "?p=2" apenas direciona pro caminho mesmo, exemplo: "portifolio/2" e pronto ele já vai ler o arquivo. se tratando de paginção e se você não quiser mexer no seu script de paginação e nem ter que adicionar os arquivos dentro da pasta como citei, você terá apenas que ajeitar a sua expressão regular no .htaccess, procura na internet sobre "expressões regulares .htaccess", pra você entender melhor e fazer uma que se adeque ao seu script de paginação, pois o que lhe enviei, é de arquivos e não de paginação. Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Outubro 29, 2013 então pesquisando na net consegui chegar no seguinte resultado: Options +FollowSymLinks AddDefaultCharset UTF-8 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?url=$1 RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?url=$1 RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ index.php?url=$1&p=$2 RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/$ index.php?url=$1&p=$2 </IfModule> aparentemente esta funcionando coloco na barra de endereço http://localhost/portifolio/5 ele pula pra pagina cinco normal... agora precisava de um empurrãozinho para adaptar a function da paginação. pra quando eu clicar na "pagina" desejada abrir http://localhost/portifolio/paginaNUMERO public function printNavigationBar() { $current_page = $this->getCurrentPage(); $total_of_pages = $this->getTotalOfPages(); $paginator = $this->getPaginator(); $query_string = $this->rebuildQueryString( $paginator ); $range = $this->getRange(); if($this->getTotalOfResults() > 0) { print "<ul class=\"pagination pagination-sm titill pull-right\">"; if ( $current_page > 1 ) { print "<li><a href=\"?" . $paginator . "=1" . $query_string . "\" class=\"azu\">primeira</a></li> "; $previous = $current_page - 1; } for ( $x = ( $current_page - $range ); $x < ( ( $current_page + $range ) + 1 ); $x++ ) { if ( ( $x > 0 ) && ( $x <= $total_of_pages ) ) { if ( $x == $current_page ) { print "<li class=\"active\"><span>$x <span class=\"sr-only\">(ativo)</span></span></li>"; } else { print "<li><a href=\"?" . $paginator . "=" . $x . $query_string . "\">$x</a></li> "; } } } if ( $current_page != $total_of_pages ) { $next = $current_page + 1; print "<li><a href=\"?" . $paginator . "=" . $total_of_pages . $query_string . "\" class=\"red\">última</a></li>"; } print '</ul>'; } } desde ja muito obrigado... Compartilhar este post Link para o post Compartilhar em outros sites
Bruno RafaeI 3 Denunciar post Postado Outubro 29, 2013 Ok, vamos lá... primeiro deixe o seu .htaccess assim: Options +FollowSymLinks AddDefaultCharset UTF-8 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?url=$1 [L,QSA] </IfModule> verifique se está funcionando, se estiver iremos mudar o seu script de paginação. Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Outubro 29, 2013 sim esta funcionando... http://localhost/site/portifolio isso não http://localhost/site/portifolio/2 Compartilhar este post Link para o post Compartilhar em outros sites
Bruno RafaeI 3 Denunciar post Postado Outubro 29, 2013 adiciona está linha embaixo da expressão: RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?url=$1 [L,QSA] ficando assim: RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?url=$1 [L,QSA] RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?url=$1 [L,QSA] Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Outubro 29, 2013 adicionei... Compartilhar este post Link para o post Compartilhar em outros sites
Bruno RafaeI 3 Denunciar post Postado Outubro 29, 2013 Já fez os testes, está tudo funcionando normal né?! bom pra eu te ajudar na função, você terá que me mostrar toda ela... pois não estou vendo os valores setados pelas variaveis lá.... a principio você só terá que mudar na URL (<a href="">) da função, para não ficar ?$paginator=1 por exemplo. Então, preciso ver todo o codigo! Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Outubro 29, 2013 class.pagination.php class PDO_Pagination { private $_connection; private $_paginator = 'page'; private $_sql; private $_limit_per_page = 6; private $_range = 3; public function __construct( $connection ) { $this->setConnection( $connection ); $this->getPager(); } public function getTotalOfResults() { $result = $this->_connection->query( str_replace( '*', 'COUNT(*)', $this->_sql ) ); return (int) $result->fetchColumn(); } private function setConnection( $connection ) { if ( $connection instanceof PDO ) { $this->_connection = $connection; } else { throw new Exception('THIS DEPENDENCY NEEDS A PDO OBJECT'); } } public function printNavigationBar() { $current_page = $this->getCurrentPage(); $total_of_pages = $this->getTotalOfPages(); $paginator = $this->getPaginator(); $query_string = $this->rebuildQueryString( $paginator ); $range = $this->getRange(); if($this->getTotalOfResults() > 0) { print "<ul class=\"pagination pagination-sm titill pull-right\">"; if ( $current_page > 1 ) { print "<li><a href=\"?" . $paginator . "=1" . $query_string . "\" class=\"azu\">primeira</a></li> "; $previous = $current_page - 1; } for ( $x = ( $current_page - $range ); $x < ( ( $current_page + $range ) + 1 ); $x++ ) { if ( ( $x > 0 ) && ( $x <= $total_of_pages ) ) { if ( $x == $current_page ) { print "<li class=\"active\"><span>$x <span class=\"sr-only\">(ativo)</span></span></li>"; } else { print "<li><a href=\"?" . $paginator . "=" . $x . $query_string . "\">$x</a></li> "; } } } if ( $current_page != $total_of_pages ) { $next = $current_page + 1; print "<li><a href=\"?" . $paginator . "=" . $total_of_pages . $query_string . "\" class=\"red\">última</a></li>"; } print '</ul>'; } } public function getTotalOfPages() { return ceil( $this->getTotalOfResults() / $this->getLimitPerPage() ); } public function getCurrentPage() { $total_of_pages = $this->getTotalOfPages(); $pager = $this->getPager(); if ( isset( $pager ) && is_numeric( $pager ) ) { $currentPage = $pager; } else { $currentPage = 1; } if ( $currentPage > $total_of_pages ) { $currentPage = $total_of_pages; } if ($currentPage < 1) { $currentPage = 1; } return (int) $currentPage; } private function getOffset() { return ( $this->getCurrentPage() - 1 ) * $this->getLimitPerPage(); } public function setSQL( $string ) { if ( strlen( $string ) < 0 ) { throw new Exception( "THE QUERY NEEDS A SQL STRING" ); } $this->_sql = $string; } public function getSQL() { $limit_per_page = $this->getLimitPerPage(); $offset = $this->getOffset(); return $this->_sql . " LIMIT {$limit_per_page} OFFSET {$offset} "; } public function setPaginator( $paginator ) { if( !is_string( $paginator ) ) { throw new Exception("PAGINATOR MUST BE OF TYPE STRING"); } $this->_paginator = $paginator; } private function getPaginator() { return $this->_paginator; } public function getPager() { return ( isset ( $_REQUEST["{$this->_paginator}"] ) ) ? (int) $_REQUEST["{$this->_paginator}"] : 0 ; } public function setLimitPerPage( $limit ) { if( !is_int( $limit ) ) { throw new Execption( "THE LIMIT MUST BE AN INTEGER" ); } $this->_limit_per_page = $limit; } public function getLimitPerPage() { return $this->_limit_per_page; } public function setRange( $range ) { if( !is_int( $range ) ) { throw new Execption( "THE RANGE MUST BE AN INTEGER" ); } $this->_range = $range; } public function getRange() { return $this->_range; } public function rebuildQueryString ( $query_string ) { $old_query_string = $_SERVER['QUERY_STRING']; if ( strlen( $old_query_string ) > 0 ) { $parts = explode("&", $old_query_string ); $new_array = array(); foreach ($parts as $val) { if ( stristr( $val, $query_string ) == false) { array_push( $new_array , $val ); } } if ( count( $new_array ) != 0 ) { $new_query_string = "&".implode( "&", $new_array ); } else { return false; } return $new_query_string; } else { return false; } } } trecho do código que usado a class (portifolio.php) { $pagination = new PDO_Pagination( $connection ); $pagination->setSQL("SELECT obraID,obraBAIRRO FROM obras ORDER BY obraID DESC"); $pagination->setPaginator( 'p' ); $results = $connection->query( $pagination->getSQL() ); IF ($pagination->getTotalOfResults() > 0) { foreach ($results->fetchAll(PDO::FETCH_OBJ) as $o) { $queryFOTOS = $connection->query(sprintf("SELECT fotoNOME FROM fotos WHERE fotoOBRAID = '%s' ORDER BY fotoCAPA ASC", $o->obraID )); IF ($queryFOTOS->rowCount() !== 0) { $f = $queryFOTOS->fetch(PDO::FETCH_OBJ); ?> Em 29/10/2013 at 18:16, Bruno RafaeI disse: Já fez os testes, está tudo funcionando normal né?! bom pra eu te ajudar na função, você terá que me mostrar toda ela... pois não estou vendo os valores setados pelas variaveis lá.... a principio você só terá que mudar na URL (<a href="">) da função, para não ficar ?$paginator=1 por exemplo. Então, preciso ver todo o codigo! então mesmo depois de ter adicionado a "segunda" linha conforme você mencionou, coloco na barra de endereço http://localhost/site/portifolio/2 e não funciona. se foi isso que você quis dizer... Compartilhar este post Link para o post Compartilhar em outros sites
Bruno RafaeI 3 Denunciar post Postado Outubro 29, 2013 Vamos modificar e tentar adequar... mude para isto: if($this->getTotalOfResults() > 0) { print "<ul class=\"pagination pagination-sm titill pull-right\">"; if ( $current_page > 1 ) { print "<li><a href=\"http://localhost/site/portifolio/1\" class=\"azu\">primeira</a></li> "; $previous = $current_page - 1; } for ( $x = ( $current_page - $range ); $x < ( ( $current_page + $range ) + 1 ); $x++ ) { if ( ( $x > 0 ) && ( $x <= $total_of_pages ) ) { if ( $x == $current_page ) { print "<li class=\"active\"><span>$x <span class=\"sr-only\">(ativo)</span></span></li>"; } else { print "<li><a href=\"http://localhost/site/portifolio/".$x."\">$x</a></li> "; } } } if ( $current_page != $total_of_pages ) { $next = $current_page + 1; print "<li><a href=\"http://localhost/site/portifolio/".$total_of_pages."\" class=\"red\">última</a></li>"; } print '</ul>'; } } faça o teste! Compartilhar este post Link para o post Compartilhar em outros sites