Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » Drupal »

[SOLUCIONADO] No aparece menú de segundo nivel en bootstrap

Estas en el tema de No aparece menú de segundo nivel en bootstrap en el foro de Drupal en Foros del Web. Hola a todos, estoy tendiendo un problema con bootstrap de Drupal. Tengo un menú con dos niveles Informática --Ordenadores ----portátiles ----Sobremesa --Impresoras ----Inyección Tinta ----laser ...
  #1 (permalink)  
Antiguo 05/02/2014, 04:20
 
Fecha de Ingreso: junio-2012
Ubicación: Madrid
Mensajes: 339
Antigüedad: 12 años, 5 meses
Puntos: 47
No aparece menú de segundo nivel en bootstrap

Hola a todos, estoy tendiendo un problema con bootstrap de Drupal.

Tengo un menú con dos niveles
Informática
--Ordenadores
----portátiles
----Sobremesa
--Impresoras
----Inyección Tinta
----laser
Sonido
Este menú lo tengo dispuesto de manera que se vaya desplegando el menú activo.
  • Si pincho en informática me aparece desplegado "Ordenadores" e "impresoras".
  • y si pincho en Ordenadores, me aparece desplegado "portátiles" y "sobremesa"

El caso es que esto funciona perfectamente en la theme Bartik(por ejemplo). pero el problema lo tengo con la theme bootstrap que solo me despliega el primer nivel del menú .En este caso:
  • Si pinchas en "Informática" se desplegaría apareciendo "ordenadores" e "impresoras"
  • pero si pincho en un submenú interno ya no me despliega nada.

Estoy buscando por ahí y solo veo soluciones CSS y Javascrip para la versión que no es theme de drupal, pero en este caso no es solución, porque no aparece ni siquiera en el html, por lo que no es una cuestión de CSS, debe de ser una cuestión de los archivos PHP de la theme.


Supongo que es respuesta complicada ya que es algo específico de bootstrap, pero si alguien tiene idea de por dónde menterle mano, aunque solo sea una pista por donde tirar le estaré muy agradecido. (llevo desarrollada toda la web sobre bootstrap por lo que he de seguir por aquí, y sólo se me ocurre la chapuza de meter los <ul> en el html con javaScript.)

Saludos y gracias una vez más

P.D por si me lo preguntáis, sí tengo activo el checkbox del menú de "mostrar expandido", de hecho si no no saldría en otra theme.
  #2 (permalink)  
Antiguo 05/02/2014, 04:35
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 1 mes
Puntos: 265
Respuesta: No aparece menú de segundo nivel en bootstrap

El theme no tiene la opción de mostrar submenús? Lo digo porque por ahí no revisaste las opciones del theme.

Igualmente si usas Bootstrap 3, los drop down menús desaparecieron. Esto es lo que puso el autor de Bootstrap:

Cita:
"Submenus just don't have much of a place on the web right now, especially the mobile web. They will be removed with 3.0" - https://github.com/twbs/bootstrap/pull/6342
Igualmente mira este enlace: https://drupal.org/comment/8147991#comment-8147991
Entra en ese archivo que mencionan y fijate si podés alterar el código de Bootstrap, al menos para que veas el HTML, seguro los estilos no los tengas.

Saludos.
  #3 (permalink)  
Antiguo 05/02/2014, 06:48
 
Fecha de Ingreso: junio-2012
Ubicación: Madrid
Mensajes: 339
Antigüedad: 12 años, 5 meses
Puntos: 47
Respuesta: No aparece menú de segundo nivel en bootstrap

Síii!! Funciona!!!

Ya estuve en ese archivo trasteando y de hecho lo manipulé para que me no me añadiera las clases que hacían el efecto "dropdown" que no me interesaba y también estuve manipulando eso que me dices pero como no conseguía que me funcionara lo abandoné.

El caso es que ahora con el link que me ha puesto lo he retomado y he conseguido que me funcione.



Copio y pego el código del archivo menu-link.func.php modificado para que funcione por si alguien se encuentra con mi problema que tenga la solución:
(En el código están comentadas las lineas que hacían que saliera el efecto dropdown, que a mí personalmente no me valía, comento con texto lo que he quitado y he añadido)
AVISO, No soy programador, lo mismo he cometido alguna burrada y aunque a mí me funciona no os fiéis demasiado


Código PHP:
Ver original
  1. <?php
  2. /**
  3.  * @file
  4.  * menu-link.func.php
  5.  */
  6.  
  7. /**
  8.  * Overrides theme_menu_link().
  9.  */
  10. function bootstrap_menu_link(array $variables) {
  11.   $element = $variables['element'];
  12.   $sub_menu = '';
  13.  
  14.   if ($element['#below']) {
  15.     // Prevent dropdown functions from being added to management menu so it
  16.     // does not affect the navbar module.
  17.     if (($element['#original_link']['menu_name'] == 'management') && (module_exists('navbar'))) {
  18.       $sub_menu = drupal_render($element['#below']);
  19.     }
  20.     elseif ((!empty($element['#original_link']['depth'])) && ($element['#original_link']['depth'] == 1)) {
  21.       // Add our own wrapper.
  22.       unset($element['#below']['#theme_wrappers']);
  23.      
  24.       $sub_menu = '<ul>' . drupal_render($element['#below']) . '</ul>'; //he eliminada la clase "dropdown-menu" (la linea original es la comantada a contineación:
  25.        //$sub_menu = '<ul class="dropdown-menu">' . drupal_render($element['#below']) . '</ul>';
  26.        
  27.       // Generate as standard dropdown.
  28.       //$element['#title'] .= ' <span class="caret"></span>'; //He comentado esta linea para que no aparezca el Triangulo  del "dropdown"
  29.       //$element['#attributes']['class'][] = 'dropdown'; //He comentado esta linea para que no añada al la clase "dropdown"
  30.       $element['#localized_options']['html'] = TRUE;
  31.  
  32.       // Set dropdown trigger element to # to prevent inadvertant page loading
  33.       // when a submenu link is clicked.
  34.       $element['#localized_options']['attributes']['data-target'] = '#';
  35.       $element['#localized_options']['attributes']['class'][] = 'dropdown-toggle';
  36.       $element['#localized_options']['attributes']['data-toggle'] = 'dropdown';
  37.     }
  38.    
  39.    
  40.         //este elseIf es que que permite desplegar el submenu con profundidad 2
  41.         elseif ((!empty($element['#original_link']['depth'])) && ($element['#original_link']['depth'] == 2)) {
  42.       // Add our own wrapper.
  43.       unset($element['#below']['#theme_wrappers']);
  44.           $sub_menu = '<ul>' . drupal_render($element['#below']) . '</ul>'; //he eliminada la clase "dropdown-menu" (la linea original es la comantada a contineación:
  45.        //$sub_menu = '<ul class="dropdown-menu">' . drupal_render($element['#below']) . '</ul>';
  46.        
  47.       // Generate as standard dropdown.
  48.       //$element['#title'] .= ' <span class="caret"></span>'; //He comentado esta linea para que no aparezca el Triangulo  del "dropdown"
  49.       //$element['#attributes']['class'][] = 'dropdown'; //He comentado esta linea para que no añada al la clase "dropdown"
  50.       $element['#localized_options']['html'] = TRUE;
  51.  
  52.       // Set dropdown trigger element to # to prevent inadvertant page loading
  53.       // when a submenu link is clicked.
  54.       $element['#localized_options']['attributes']['data-target'] = '#';
  55.       $element['#localized_options']['attributes']['class'][] = 'dropdown-toggle';
  56.       $element['#localized_options']['attributes']['data-toggle'] = 'dropdown';
  57.     }
  58.   }
  59.   // On primary navigation menu, class 'active' is not set on active menu item.
  60.   // @see https://drupal.org/node/1896674
  61.   if (($element['#href'] == $_GET['q'] || ($element['#href'] == '<front>' && drupal_is_front_page())) && (empty($element['#localized_options']['language']))) {
  62.     $element['#attributes']['class'][] = 'active';
  63.   }
  64.   $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  65.   return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
  66. }

Saludos y muchísimas gracias una vez Mario, te debo unas cuantas ya :)
  #4 (permalink)  
Antiguo 05/02/2014, 07:26
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 1 mes
Puntos: 265
Respuesta: No aparece menú de segundo nivel en bootstrap

Claro, en las lineas 20 y 40, donde tenés los "if", fijate que los filtra por "depth", es el nivel del menú. Si querés añadir una tercera línea solo debés agregar otro IF.

Jeje de nada, un placer ayudarte.

Etiquetas: bootstrap, nivel, segundo
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 06:39.