jmlab 0 Denunciar post Postado Abril 6, 2015 Boa noite :) Tenho um website quase completo, mas quando cheguei à parte da criação/adaptação da URL para URL amigável, deparei-me com um problema que espero me possam auxiliar. O menu é composto por um "dropup" com 2 subníveis, pelo que a estrutura na base de dados está com um "menuP" que é o menú principal e depois, dependente do "menuP" tem o "subN1" e dependente deste temos o "subN2". Na URL, actualmente tenho: site.com/publico/index.php?menuP=1 - correspondente ao menu Pai site.com/publico/index.php?subn1=1 - correspondente ao 1º submenu site.com/publico/index.php?subn2=1 - correspondente ao 2º submenu Tudo está a funcionar corretamente. A verdade, é que o meu código está estruturado de uma forma que me está a ser complicado perceber e integrar o ".htaccess" e chamar as respectivas URLs amigáveis. Tenho inclusivamente um campo "slug" na minha base de dados, com as minhas URLs personalizadas (caso fosse mais fácil "puxar" para o index.php). Acredito que seja dificil de me ajudarem sem verem o código, mas não justificava colocar todo o código, sem que alguém estivesse disposto a ajudar Caso ajude, colocarei disponível todo o código. Muito obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Mateus Silva 64 Denunciar post Postado Abril 6, 2015 não há como te ajudar sem ter o código (tanto php quanto htaccess) '-' Compartilhar este post Link para o post Compartilhar em outros sites
jmlab 0 Denunciar post Postado Abril 7, 2015 não há como te ajudar sem ter o código (tanto php quanto htaccess) '-' Obrigado por responder tão rápido. Posso disponibilizar o código. Acho no entanto demasiado extenso para o colocar aqui, o menu ter demasiadas funções. Poderei colocar online ou dar acesso a uma pasta onde possa ver todo o código. O que acha? :) Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Abril 7, 2015 Mais fácil só postar os trechos referentes ao que você quer fazer, amigo. Compartilhar este post Link para o post Compartilhar em outros sites
jmlab 0 Denunciar post Postado Abril 8, 2015 Mais fácil só postar os trechos referentes ao que você quer fazer, amigo. Ok então! :) Vou tentar colocar todos os códigos necessários (espero eu). A URL neste momento é a seguinte: localhost/cal.vrsFinal.01.01/publico/index.php Cada vez que carrega um item do menu, seja qual for o nível, fica: site.com/publico/index.php?menuP=xxx - correspondente ao menu Pai site.com/publico/index.php?subn1=xxx - correspondente ao 1º submenu site.com/publico/index.php?subn2=xxx - correspondente ao 2º submenu Função Menu: // MENU PRINCIPAL // Encontrar "menu_p" function find_all_menuP() { global $dbconn; $query = "SELECT * "; $query .= "FROM menuP "; // $query .= "WHERE visivel = 1 "; $query .= "ORDER BY posicao ASC"; $menuP_set = mysqli_query($dbconn, $query); confirm_query($menuP_set); return $menuP_set; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Encontrar "sub_n1" function find_subn1_for_menuP ($menuP_id) { global $dbconn; $safe_menuP_id = mysqli_real_escape_string($dbconn, $menuP_id); $query = "SELECT * "; $query .= "FROM subn1 "; $query .= "WHERE visivel = 1 "; $query .= "AND menuP_id = {$safe_menuP_id} "; $query .= "ORDER BY posicao ASC"; $subn1_set = mysqli_query($dbconn, $query); confirm_query($subn1_set); return $subn1_set; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Encontrar "sub_n2" function find_subn2_for_subn1 ($subn1_id) { global $dbconn; $query = "SELECT * "; $query .= "FROM subn2 "; $query .= "WHERE visivel = 1 "; $query .= "AND subn1_id = {$subn1_id} "; $query .= "ORDER BY posicao ASC"; $subn2_set = mysqli_query($dbconn, $query); confirm_query($subn2_set); return $subn2_set; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // FUNÇÃO NAVIGATION function public_navigation($menuP_array, $subn1_array, $subn2_array) { // INÍCIO 'MENUP' QUERY $output = "<ul class=\"menuP\">"; $menuP_set = find_all_menuP(); while($menuP = mysqli_fetch_assoc($menuP_set)) { $output .= "<li"; if($menuP_array && $menuP["id"] == $menuP_array["id"]) { $output .= " class=\"selectedPrincipal\""; } $output .= ">"; $output .= "<a class=\"btnP\" href=\"publico/index.php?menuP="; $output .= urlencode($menuP["id"]); $output .= "\">"; $output .= "<span id=\"icone\">"; $output .= $menuP['GlyPrincipal']; $output .= "</span>"; $output .= "<span id=\"text\">"; $output .= htmlentities($menuP["titulo_portugues"]); $output .= "</span>"; $output .= "</a>"; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // INÍCIO 'SUBN1' QUERY $subn1_set = find_subn1_for_menuP ($menuP["id"]); $output .= "<ul class=\"subN1\">"; while($subn1 = mysqli_fetch_assoc($subn1_set)) { $output .= "<li"; if($subn1_array && $subn1["id"] == $subn1_array["id"]) { $output .= " class=\"selectedN1\""; } $output .= ">"; $output .= "<a class=\"btnN1\" href=\"publico/index.php?subn1="; $output .= urlencode($subn1["id"]); $output .= "\">"; $output .= htmlentities($subn1["titulo_portugues"]); $output .= $subn1["gly"]; $output .= "</a>"; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // INÍCIO 'SUBN2' QUERY $subn2_set = find_subn2_for_subn1 ($subn1["id"]); $output .= "<ul class=\"subN2\">"; while($subn2 = mysqli_fetch_assoc($subn2_set)) { $output .= "<li"; if($subn2_array && $subn2["id"] == $subn2_array["id"]) { $output .= " class=\"selectedN2\""; } $output .= ">"; $output .= "<a class=\"btnN2\" href=\"publico/index.php?subn2="; $output .= urlencode($subn2["id"]); $output .= "\">"; $output .= htmlentities($subn2["titulo_portugues"]); $output .= "</a>"; $output .= "</li>"; } $output .= "</ul>"; $output .= "</li>"; } $output .= "</ul>"; $output .= "</li>"; } mysqli_free_result($menuP_set); $output .= "</ul>"; return $output; } index.php: <?php require_once ("includes/session.php"); require_once ("includes/functions.php"); require_once ("includes/dbconn.php"); error_reporting(E_ALL); ini_set('display_errors', 1); ?> <?php encontrar_conteudo_selecionado(); ?> <?php find_slideshow(); ?> <!DOCTYPE html> <html lang="pt-pt"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="author" content=""> <link rel="stylesheet" href="img/iconesCAL/demo-files/demo.css"> <link rel="stylesheet" href="img/iconesCAL/demo-files/style.css"></head> <title><?php echo $titulo_site;?></title> <!-- CSS Start --> <?php include ('config/css.php'); ?> <!-- CSS End --> <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> <![endif]--> <script type="text/javascript"> function MM_swapImgRestore() { //v3.0 var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc; } function MM_preloadImages() { //v3.0 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array(); var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++) if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}} } function MM_findObj(n, d) { //v4.01 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); if(!x && d.getElementById) x=d.getElementById(n); return x; } function MM_swapImage() { //v3.0 var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3) if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];} } </script> </head> <body onLoad="MM_preloadImages('img/redes_sociais/facebook_thumb_down.png','img/JMlogoDOWN.png')"> <!-- INÍCIO ESTRUTURA WEBSITE --> <!-- Navigation Start --> <?php include('../template/header.php'); ?> <!-- Navigation End --> <!-- ############### --> <!-- Background Transparent Start --> <div class="container-fluid"> <div class="wrapper"> <?php echo $_GET['page']; ?> <?php if ($current_subn1) { ?> <div class="caixa-transparente-conteudo"></div> <?php } elseif ($current_subn2) { ?> <div class="caixa-transparente-conteudo"></div> <?php } ?> </div> </div> <!-- Background Transparent End --> <!-- ############### --> <!-- Conteúdos Start --> <div class="container-fluid conteudos"><!-- START container-fluid conteudos --> <div class="row"> <!-- Conteúdos PT Start --> <div class="col-md-4 PT"> <?php if ($current_subn1) { ?> <h1><?php echo htmlentities($current_subn1["titulo_portugues"]); ?></h1> <?php echo $current_subn1["conteudo_portugues"]; ?> <?php } else if ($current_subn2) { ?> <h1><?php echo htmlentities($current_subn2["titulo_portugues"]); ?></h1> <?php echo $current_subn2["conteudo_portugues"]; ?> <?php } ?> </div> <!-- Conteúdos PT End --> <!-- ############### --> <!-- Conteúdos EN Start --> <div class="col-md-4 EN"> <?php if ($current_subn1) { ?> <h1><?php echo htmlentities($current_subn1["titulo_ingles"]); ?></h1> <?php echo $current_subn1["conteudo_ingles"]; ?> <?php } else if ($current_subn2) { ?> <h1><?php echo htmlentities($current_subn2["titulo_ingles"]); ?></h1> <?php echo $current_subn2["conteudo_ingles"]; ?> <?php } ?> </div> <!-- Conteúdos EN End --> <!-- ############### --> <!-- Conteúdos Imagens Start --> <div class="col-md-4 fotos"> <?php if ($current_subn1) { ?> <?php $q = "SELECT * FROM subn1Fotos WHERE subn1_id = $current_subn1[id]"; $r = mysqli_query($dbconn, $q); while ($foto = mysqli_fetch_assoc($r)) { $imagem = $foto['imagem']; $legenda = $foto['legenda']; ?> <div id="conteudo_info"> <article id="artigo"> <ul class="rig"> <li> <img src="uploads/fotosPaginas/<?php echo $imagem; ?>"> <div id="caixa_texto"> <p><?php echo $legenda; ?></p> </div> </li> </ul> </article> </div> <?php } ?> </div> <!-- Conteúdos Imagens End --> <?php } ?> </div> </div><!-- END container-fluid conteudos --> <!-- Conteúdos End --> <!-- ############### --> <!-- Footer Start --> <?php include('../template/footer.php'); ?> <!-- Footer End --> <!-- FIM ESTRUTURA WEBSITE --> <!-- jQuery --> <script src="js/jquery.js"></script> <!-- Bootstrap Core JavaScript --> <script src="js/bootstrap.min.js"></script> <script src="js/icons/cal-icons.js"></script> <!-- Slideshow JS --> <script src="js/jquery-1.7.1.min.js"></script> <script type="text/javascript" src="js/raphael-min.js"></script> <script type="text/javascript" src="js/jquery.easing.js"></script> <script src="js/iview.js"></script> <script> $(document).ready(function(){ $('#imageslider').iView({ pauseTime: 5000, pauseOnHover: true, directionNavHoverOpacity: 0, timer: "Bar", timerDiameter: "50%", timerPadding: 0, timerStroke: 7, timerBarStroke: 0, timerColor: "#FFF", timerY: 20, timerX: 20, timerPosition: "bottom-right", captionOpacity: 1 }); }); </script> <!-- Slideshow JS --> </body> </html> .htaccess (fiz variadas experiências, mas como nenhuma resultou, coloco só o que está funcional neste momento: ErrorDocument 404 http://localhost/cal.vrsFinal.01.01/publico/404.php ErrorDocument 403 http://localhost/cal.vrsFinal.01.01/publico/403.php ErrorDocument 500 http://localhost/cal.vrsFinal.01.01/publico/500.php Options -Indexes RewriteEngine on RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d Acho que está tudo o que é necessário para perceber a funcionalidade. Uma das ideias (a ideal até), era ter um campo nos meus formulários chamado "url", que pudesse personalizar e fazer esse echo na URL amigável. Tenho inclusivamente em todos os meus formulários "CRUD", um campo "URL" e igualmente na minha base de dados. Seja através de URL no banco de dados (ideal) ou exclusivamente em ".htaccess", agradeço a ajuda. :) Muito Obrigado!!! Compartilhar este post Link para o post Compartilhar em outros sites