Ir para conteúdo

Arquivado

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

jmlab

URL amigável

Recommended Posts

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 xsmile.png.pagespeed.ic.CwSpBGGvqNyY-jxE

Caso ajude, colocarei disponível todo o código.

Muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

×

Informação importante

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