Foros del Web » Programando para Internet » PHP »

menú abecedario, resaltar letra en la que te encuentras

Estas en el tema de menú abecedario, resaltar letra en la que te encuentras en el foro de PHP en Foros del Web. Hola, tengo este código para buscar autores (prmiera letra del apellido) por nombre en una base de datos. ME funciona perfectamente pero me gustaría que ...
  #1 (permalink)  
Antiguo 10/09/2012, 09:34
 
Fecha de Ingreso: diciembre-2007
Mensajes: 13
Antigüedad: 16 años, 3 meses
Puntos: 0
menú abecedario, resaltar letra en la que te encuentras

Hola,

tengo este código para buscar autores (prmiera letra del apellido) por nombre en una base de datos.
ME funciona perfectamente pero me gustaría que al estar en la letra A, se marcase esa letra (otro estilo por ejemplo y si puede ser sin 'link').
No sé bien cómo hacerlo, dónde incluir el nuevo código o qué modificación hacer a este código que tengo ya hecho.

¡Muchas gracias!



Código PHP:

<?php
$conexion
=conectar();

echo 
"Busca por apellido:";

echo 
"<div class=\"alfabetT\"><a href=\"autores.php?letra=%\">TODOS</a></div>";
$abecedario=array('A ','B ','C ','D ','E ','F ','G ','H ','I ','J ','K ','L ','M ','N ','O ','P ','Q ','R ','S ','T ','U ','V ','W ','X ','Y ','Z ');
foreach(
$abecedario AS $letra){
       echo 
"<div class=\"alfabet\"><a href=\"autores.php?letra=$letra\"> ".$letra." </a></div>";
}

if (!empty(
$_GET['letra'])){


$letra=$_GET['letra'];
$buscar=mysql_query("SELECT * FROM autores WHERE tituloA LIKE '".$letra."%' ORDER BY autores.tituloA ASC");



  if (
mysql_num_rows($buscar) > 0){

        while(
$fila=mysql_fetch_array($buscar)){

echo 
"<IMG SRC=\"../../../blog/".$fila['imagen1']."\"></IMG>";
echo 
".stripslashes($fila['tituloA']).";
echo 
".stripslashes($fila['descripcionA']).";
}

} else {
echo 
"<div class=\"mensaje\">>> No hay resultados.</a></div>";
}

?>
  #2 (permalink)  
Antiguo 10/09/2012, 09:47
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 9 meses
Puntos: 641
Respuesta: menú abecedario, resaltar letra en la que te encuentras

compruebas el valor de letra dentro del foreach.

Código PHP:
Ver original
  1. foreach($abecedario AS $letra){
  2.     if($_GET['letra'] == $letra){
  3.         <strong>$letra</strong>
  4.     }else{
  5.         echo "<div class=\"alfabet\"><a href=\"autores.php?letra=$letra\"> ".$letra."
  6.    }
  7. </a></div>";
  8. }
  #3 (permalink)  
Antiguo 10/09/2012, 10:36
 
Fecha de Ingreso: diciembre-2007
Mensajes: 13
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: menú abecedario, resaltar letra en la que te encuentras

Gracias. Probado tal cual y nada,

añadiéndolo me da fallo en línea: <strong>$letra</strong>

Si le pongo ';' al final o un echo ""; previo, tampoco funciona.
  #4 (permalink)  
Antiguo 10/09/2012, 10:44
Avatar de PIRRUMAN  
Fecha de Ingreso: febrero-2006
Ubicación: Monterrey, Nuevo León
Mensajes: 633
Antigüedad: 18 años, 2 meses
Puntos: 53
Respuesta: menú abecedario, resaltar letra en la que te encuentras

Cita:
$letra=$_GET['letra'];
foreach($abecedario AS $letra)
{
echo "<div class='alfabet'><a href='autores.php?letra=$letra'>";
if($_GET['letra'] == $letra)
{
echo "<b>$letra</b>";
}
else
{
echo $letra;
}
echo "</a></div>";
}
__________________
“Prefiero ser un tonto momentaneo que un eterno ignorante”
“¡El éxito es resultado de los aciertos,los aciertos resultado de la experiencia y la experiencia resultado de los errores!”
  #5 (permalink)  
Antiguo 10/09/2012, 11:03
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 9 meses
Puntos: 641
Respuesta: menú abecedario, resaltar letra en la que te encuentras

es que no debes copiar y pegar códigos, solo te di la lógica, la sintaxis del code depende de ti.
  #6 (permalink)  
Antiguo 10/09/2012, 11:09
 
Fecha de Ingreso: diciembre-2007
Mensajes: 13
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: menú abecedario, resaltar letra en la que te encuentras

Gracias
NO me da fallos el código pero sigue sin salirme nada, es decir, si estoy en letra B, sigue teniendo enlace y no cambia de estilo ni nada.
  #7 (permalink)  
Antiguo 10/09/2012, 11:25
 
Fecha de Ingreso: diciembre-2007
Mensajes: 13
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: menú abecedario, resaltar letra en la que te encuentras

No copie tal cual,

si $_GET['letra'] == $letra, entonces con un estilo negrita y más oscuro y sin enlace.
Si la condición no se da, estilo más claro y con enlace.

todsa las letras me salen con el enlace y estilo "alfabet".



Código PHP:
Ver original
  1. foreach($abecedario AS $letra){
  2.     if($_GET['letra'] == $letra){
  3.     echo "<div class=\"alfabet2\"><strong>".$letra."</strong></div>";
  4.     }else{echo "<div class=\"alfabet\"><a href=\"autores.php?letra=$letra\"> ".$letra." </a></div>";}
  5. }
  #8 (permalink)  
Antiguo 10/09/2012, 12:40
 
Fecha de Ingreso: diciembre-2007
Mensajes: 13
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: menú abecedario, resaltar letra en la que te encuentras

PIRRUMAN, tampoco me funciona tu solución.

LAs letras me siguen saliendo igual. El caso es que no me reconoce bien la condicion IF porque le pongo echos tipo si la condicion es igual saca un 1 y si no saca un 2 y nada... no funciona.

Gracias de todos modos
  #9 (permalink)  
Antiguo 10/09/2012, 12:44
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 9 meses
Puntos: 641
Respuesta: menú abecedario, resaltar letra en la que te encuentras

el error podria ser en lo que trae el $_GET['letra'] imprime el valor d $_GET a ver si esta bien.
  #10 (permalink)  
Antiguo 10/09/2012, 13:48
Avatar de PIRRUMAN  
Fecha de Ingreso: febrero-2006
Ubicación: Monterrey, Nuevo León
Mensajes: 633
Antigüedad: 18 años, 2 meses
Puntos: 53
Respuesta: menú abecedario, resaltar letra en la que te encuentras

Cita:
Iniciado por manu011 Ver Mensaje
No copie tal cual,

si $_GET['letra'] == $letra, entonces con un estilo negrita y más oscuro y sin enlace.
Si la condición no se da, estilo más claro y con enlace.

todsa las letras me salen con el enlace y estilo "alfabet".
imprime como te comentaron el valor de $_GET['letra'];y agrega el atributo style a ver que pasa
Cita:


foreach($abecedario AS $letra){
print "recibido : ".$_GET['letra']."<br>";
print "Asignado : ".$letra."<br>";

if($_GET['letra'] == $letra){
echo "<div class=\"alfabet2\"><strong style=\"color:red;\">".$letra."</strong></div>";
}else{echo "<div class=\"alfabet\"><a href=\"autores.php?letra=$letra\"> ".$letra." </a></div>";}
}


__________________
“Prefiero ser un tonto momentaneo que un eterno ignorante”
“¡El éxito es resultado de los aciertos,los aciertos resultado de la experiencia y la experiencia resultado de los errores!”
  #11 (permalink)  
Antiguo 10/09/2012, 15:12
 
Fecha de Ingreso: diciembre-2007
Mensajes: 13
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: menú abecedario, resaltar letra en la que te encuentras

Pues mira el resultado:

http://demipage.com/nueva/OK/castellano/autores2.php

Código PHP:


<?php

$conexion
=conectar();

echo 
"<div class=\"seleccione\">Busca por apellido:</a></div>";

$abecedario=array('A ','B ','C ','D ','E ','F ','G ','H ','I ','J ','K ','L ','M ','N ','O ','P ','Q ','R ','S ','T ','U ','V ','W ','X ','Y ','Z ');

$letra $_GET['letra'];
foreach(
$abecedario AS $letra){

print 
"recibido : ".$_GET['letra']."<br>";
print 
"Asignado : ".$letra."<br>";

if(
$_GET['letra'] == $letra){

echo 
"<strong style=\"color:red;\">".$letra."</strong>";

}else

{echo 
"<a href=\"autores2.php?letra=$letra\"> ".$letra." </a>"; echo "<br>";}

}


if (!empty(
$_GET['letra'])){


    
$letra=$_GET['letra'];
    
$buscar=mysql_query("SELECT * FROM autores WHERE tituloA LIKE '".$letra."%' ORDER BY autores.tituloA ASC");



  if (
mysql_num_rows($buscar) > 0){

        while(
$fila=mysql_fetch_array($buscar)){

            echo 
"<DIV ALIGN=\"left\" ID=\"imagen\"><IMG SRC=\"../../../blog/".$fila['imagen1']."\"></IMG></DIV>";
            }
  } else {
    echo 
"<div class=\"mensaje\">>> No hay resultados.</a></div>";
  }
} else {
    echo 
"<div class=\"mensaje\">>> INICIO.</a></div>";
}

?>

No entiendo bien, cuando recibido y asignado son iguales, no hace lo q tiene que hacer, sigue dando estilo y enlace a esa letra...
  #12 (permalink)  
Antiguo 10/09/2012, 15:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: menú abecedario, resaltar letra en la que te encuentras

Tu problema es que tu "abecedario" tiene espacios, por eso no entra en el condicional, usa trim() para limpiar tu variable y así hacer la comparación.
  #13 (permalink)  
Antiguo 10/09/2012, 15:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: menú abecedario, resaltar letra en la que te encuentras

Por otro lado puedes hacer algo tan simple como esto:
Código PHP:
Ver original
  1. $letraBuscar = isset($_GET['letra']) ? trim($_GET['letra']) : '';
  2. foreach(range('A', 'Z') as $letra) {
  3.      if ($letra == $letraBuscar) {
  4.               echo $letra;
  5.      } else {
  6.               echo '<a href="">' . $letra . '</a>';
  7.      }
  8. }

Saludos.
  #14 (permalink)  
Antiguo 10/09/2012, 15:43
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 9 meses
Puntos: 641
Respuesta: menú abecedario, resaltar letra en la que te encuentras

Ya, pues claro, en tu array estas añadiendo un espacio:

Código PHP:
Ver original
  1. array('A ', 'B ');
etc. quitale es espacio al final de cada letra, es evidente que nunca van a ser iguales la letra A y Aespacio

PD me gano por un minuto GAtorV :/ jajaja
  #15 (permalink)  
Antiguo 10/09/2012, 16:06
 
Fecha de Ingreso: diciembre-2007
Mensajes: 13
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: menú abecedario, resaltar letra en la que te encuentras

Qué tonto yo...

Muchas gracias a todos, resuelto rápido y muy bien además.

Etiquetas: alfabetico, indice, letra, resaltar
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 20:20.