Foros del Web » Programando para Internet » PHP »

PHP OO current en menu dinamico y for con mysqli

Estas en el tema de current en menu dinamico y for con mysqli en el foro de PHP en Foros del Web. Muy buenas tengo un menu dinámico en php y los datos provienen de una base de datos pero el diseño que realice tiene un color ...
  #1 (permalink)  
Antiguo 27/09/2012, 16:00
 
Fecha de Ingreso: septiembre-2012
Mensajes: 15
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta current en menu dinamico y for con mysqli

Muy buenas tengo un menu dinámico en php y los datos provienen de una base de datos pero el diseño que realice tiene un color específico para el menú en la página activa y no me sale lo que he intentado....dejo el código y en verdad muchas gracias por su ayuda....

//CONEXION:
Código PHP:
Ver original
  1. $conn = new mysqli("localhost", "user", "pass", "db");
  2. $conn->query("SET NAMES 'utf8'");

// COMPROBAR CONEXION
Código PHP:
Ver original
  1. if ($conn->connect_errno) {
  2.     printf("Error al conectarse: %s\n", $conn->connect_error);
  3.     exit();}

//MENU PRINCIPAL

Código PHP:
Ver original
  1. $queryNavPri       = "SELECT p.idNavPri, p.nomNavPri, p.urlNavPri, p.titleNavPri FROM menuPrincipal AS p";
  2. $resNavPri         = $conn->query($queryNavPri);

//MOSTRAR EL MENU

Código PHP:
Ver original
  1. <nav>
  2. <ul>
  3. <?php
  4. if($resNavPri->num_rows > 0){
  5. while($rowNavPri = $resNavPri->fetch_assoc()){
  6. echo'
  7.     <li>
  8.         <a href="'.$rowNavPri['urlNavPri'].'.php" title="'.$rowNavPri['titleNavPri'].'">'.$rowNavPri['nomNavPri'].'</a></li>';}}?>
  9. </ul>
  10. </nav>


Otra consulta que me quede corto para mysqli como pudiera recorrer registros con for....es que lo usaba en mysql y en una clase pero ahora como uso mysqli no se como aplicarlo, debido a no saber tuve que crear dos tablas para el menu una para menu principal y otra para menu secundario y creo que no es lo correcto ya que con un for($i=0;$i<3;$i++){ creo que lograría limitar el menu primario con el secundario en una sola consulta......................gracias muchas gracias por su colaboración en estas dos inquietudes
  #2 (permalink)  
Antiguo 27/09/2012, 17:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: current en menu dinamico y for con mysqli

1- Bienvenido a FDW

2- Tienes alguna forma de saber cuál es la página que debe estar activa en el menú?
Imagino que sería algo como $curPag = id_de_página

3- No me quedó claro eso del form en mysql que no supiste adaptar en mysqli, si muestras el código sería más fácil entenderlo y tratar de ayudar.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 27/09/2012, 18:02
 
Fecha de Ingreso: septiembre-2012
Mensajes: 15
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta Respuesta: current en menu dinamico y for con mysqli

Gracias por tomar tu tiempo para ayudarme.....Bien te pondré el código según el orden que tengo ya que son varias páginas y también te pondré el de la base de datos.......la idea es que si está en la página contacto por medio de una clase en css tenga un estilo diferente mmmm sea de color rojo por ejemplo o sea que si yo le doy clic a un enlace del menú cuando me abra la página aparezca ese menú con un efecto de color (eso ya lo hice en css pero no logro aplicarlo a un menú dinámico)........sobre lo del for con mysqli te pondré un código que utilice pero no se como aplicarlo a este.........


BASE DE DATOS
Código MySQL:
Ver original
  1. --
  2. -- Base de datos: `menu`
  3.  
  4. -- Estructura de tabla para la tabla `menuPrincipal`
  5.  
  6. DROP TABLE IF EXISTS `menuPrincipal`;
  7. CREATE TABLE IF NOT EXISTS `menuPrincipal` (
  8.   `idNavPri` tinyint(3) NOT NULL AUTO_INCREMENT,
  9.   `nomNavPri` varchar(100) NOT NULL,
  10.   `urlNavPri` varchar(100) NOT NULL,
  11.   `titleNavPri` varchar(100) NOT NULL,
  12.   PRIMARY KEY (`idNavPri`)
  13. ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COMMENT='Tabla para el menu principal' AUTO_INCREMENT=4 ;
  14.  
  15. --
  16. -- Volcado de datos para la tabla `menuPrincipal`
  17. --
  18.  
  19. INSERT INTO `menuPrincipal` (`idNavPri`, `nomNavPri`, `urlNavPri`, `titleNavPri`) VALUES
  20. (1, 'Inicio', 'index', 'Página principal'),
  21. (2, 'Programación', 'programacion', 'Toda la programación'),
  22. (3, 'Noticias', 'noticias', 'Espacio para noticias'),
  23. (4, 'Agenda', 'agenda', 'Información de eventos importantes ');

PÁGINA CONEXION.PHP
AQUÍ REALIZO LA CONEXIÓN A LA BASE DE DATOS Y LA CONSULTA SQL
Código PHP:
Ver original
  1. <?php
  2. //CONEXION
  3. $conn = new mysqli("localhost", "user", "pass", "basededatos");
  4. $conn->query("SET NAMES 'utf8'");
  5.  
  6. // COMPROBAR CONEXION
  7. if ($conn->connect_errno) {
  8.     printf("Error al conectarse: %s\n", $conn->connect_error);
  9.     exit();}
  10.  
  11. //MENU PRINCIPAL
  12. $queryNavPri       = "SELECT p.idNavPri, p.nomNavPri, p.urlNavPri, p.titleNavPri FROM menuPrincipal AS p";
  13. $resNavPri         = $conn->query($queryNavPri);
  14.  
  15. //CERRAR CONEXION
  16. $conn->close();
  17. ?>

PÁGINA MENUPRINCIPAL.PHP
AQUÍ REALIZO LOS ARREGLOS PARA EL MENU PRINCIPAL
Código PHP:
Ver original
  1. <ul>
  2. <?php
  3. if($resNavPri->num_rows > 0){
  4. while($rowNavPri = $resNavPri->fetch_assoc()){
  5. echo'
  6.     <li>
  7.         <a href="'.$rowNavPri['urlNavPri'].'.php" title="'.$rowNavPri['titleNavPri'].'">'.$rowNavPri['nomNavPri'].'</a></li>';}}?>
  8. </ul>

PÁGINA INDEX.PHP
ESTE ES EL INDEX Y VINCULO EL MENU CON UN INCLUDE
Código PHP:
Ver original
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Página de menú</title>
  6. </head>
  7.  
  8. <body>
  9. ?php include('clases/menu.php'); ?><!--menu Principal -->
  10. </body>
  11. </html>

Este sería el código y de la manera que lo tengo.......Funciona a la perfección pero el punto es que no me da para poner un estilo al menu que está activo y ese es mi problema.....


sobre lo anterior que te decía del for con mysqli y no mysql te mostraré el código


CLASE PARA LA CONEXIÓN Y CONSULTA
ESTA ES UNA CLASE BASADA EN MYSQL
Código PHP:
Ver original
  1. /////////////////////////////////////
  2. /*conexion para la base de datos menu*/
  3. ////////////////////////////////////
  4. class ConnMysql{
  5.     public static function conn(){
  6.         $conexion = mysql_connect("localhost","user","pass");
  7.         mysql_query("SET NAMES 'utf8'");
  8.         mysql_select_db("elementos");
  9.         return $conexion;
  10.         }
  11.     }
  12. //consulta para la tabla menu
  13. class menu{
  14.     private $enlaces;
  15.     public function __contruct(){
  16.         $this->enlaces=array();
  17.         }
  18.     public function get_enlaces(){
  19.         $sql_menu = "SELECT nombre_pagina, enlace_menu FROM menu";
  20.         $datos_menu = mysql_query($sql_menu, ConnMysql::conn());
  21.             while ($reg_menu=mysql_fetch_assoc($datos_menu)){
  22.             $this->enlaces[]=$reg_menu;
  23.             }
  24.             return $this->enlaces;
  25.     }
  26. }

PAGINA INDEX.PHP
AQUÍ MUESTO EL MENÚ PERO CON UN FOR Y NO UN WHILE Y AHÍ ES QUE ME ENREDO....EL MENÚ FUNCIONA IGUAL DE MARAVILLA EN ESTE EJEMPLO PERO COMO TE DECÍA CON MYSQL
Código PHP:
Ver original
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Página menú</title>
  6. </head>
  7. <body>
  8.  
  9. <nav class="nav_principal">
  10.     <ul>
  11.         <?php
  12.         $nav = new menu;
  13.         $ver_menu = $nav->get_enlaces();
  14.         for($i=0;$i<7;$i++){
  15.         echo "<li><a href='page/".$ver_menu[$i]["enlace_menu"]."'>".$ver_menu[$i]["nombre_pagina"]."</a><li>";}?>                  
  16.     </ul>
  17. </nav>
  18. <nav class="sub_nav">
  19.     <ul>
  20.         <?php
  21.         for($i=8;$i<13;$i++){
  22.         echo "<li><a href='page/".$ver_menu[$i]["enlace_menu"]."'>".$ver_menu[$i]["nombre_pagina"]."</a><li>";}?>      
  23.     </ul>
  24. </nav>
  25.  
  26. </body>
  27. </html>


Si te fijas en esta parte dividí el menú en principal y secundario pero haciendo una sola consulta y sería fantástico si descubro como hacerlo pero no con mysql sino con mysqli..........pero por favor en partes la primera es la más primordial y si conoces como aplicar la segunda en la primera te lo agradezco
  #4 (permalink)  
Antiguo 27/09/2012, 18:25
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: current en menu dinamico y for con mysqli

A ver, en tu tabla tienes idnavpri y nomnavpri, cualquiera de los dos puede usarse para identificar la página actual, me parece más fácil con nomnavpri; veamos como:

Código PHP:
Ver original
  1. $paginaActual = 'nombre_de_pagina';
  2.  
  3. // Por ejemplo, para la página principal
  4. $paginaActual = 'index';
  5.  
  6. // Después, al crear el menú
  7. while(/* Lees cada opción del menú */) {
  8.     $clase = ($paginaActual == $row['nomnavpri']) ? ' class="clase-a-aplicar"' : '';
  9.     echo "<a href=\"aquí_la_url\" $clase>aquí el texto del enlace</a>";
  10. }

Aparte de usar mysqli en lugar de mysql notas alguna otra diferencia en lo que haces?
Bueno, con mysql primero cargas todo en un sólo arreglo y después recorres con for para limitar los que quieres que aparezcan en cada menú; mientras que con mysqli haces la consulta y directamente creas el menú.

Entonces, no es por la diferencia entre una y otra librería, sino porque usas otra lógica muy distinta.

P.D. Te juro que puedo leer perfectamente sin que pongas letras como para titular de la sección de escándalos en un diario impreso y sin cambiar colores.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 27/09/2012, 19:15
 
Fecha de Ingreso: septiembre-2012
Mensajes: 15
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: current en menu dinamico y for con mysqli

Muy bien excelente lo logré gracias tenía una muy leve idea de usar algo así pero jamás hubiese llegado a ese punto.......sobre lo de mysqli no quede muy claro pero así está bien....ahh y sobre lo de las letras no lo hice por tí lo hago por mí que necesito meterle a todo diseño y cosas.......muchas gracias por tu ayuda
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:33.