Pregunta

Estoy tratando de añadir menús desplegables para un tema de Drupal que utiliza el texto deslizante redondeo puerta CSS.

La versión actual utiliza una inyección de enlaces primaria del tramo en las etiquetas A, que funciona muy bien. Pero no soporta menús desplegables.

Código de trabajo:

<?php print theme('links', $primary_links, array('class' => 'links primary-links')) ?>

En la plantilla con una adición de archivos template.php:

<?php
// function for injecting spans inside anchors which we need for the theme's rounded corner background images
function strands_guybrush_links($links, $attributes =  array('class' => 'links')) {
  $output = '';
  if (count($links) > 0) {
    $output = '<ul'. drupal_attributes($attributes) .'>';

    $num_links = count($links);
    $i = 1;

    foreach ($links as $key => $link) {
      $class = $key;

      // Add first, last and active classes to the list of links to help out themers.
      if ($i == 1) {
        $class .= ' first';
      }
      if ($i == $num_links) {
        $class .= ' last';
      }
      if (isset($link['href']) && ($link['href'] == $_GET['q'] || ($link['href'] == '<front>' && drupal_is_front_page()))) {
        $class .= ' active';
      }
      $output .= '<li'. drupal_attributes(array('class' => $class)) .'>';

      if (isset($link['href'])) {
        $link['title'] = '<span class="link">' . check_plain($link['title']) . '</span>';
        $link['html'] = TRUE;      
        // Pass in $link as $options, they share the same keys.
        $output .= l($link['title'], $link['href'], $link);        
      }
      else if (!empty($link['title'])) {
        // Some links are actually not links, but we wrap these in <span> for adding title and class attributes
        if (empty($link['html'])) {
          $link['title'] = check_plain($link['title']);
        }
        $span_attributes = '';
        if (isset($link['attributes'])) {
          $span_attributes = drupal_attributes($link['attributes']);
        }
        $output .= '<span'. $span_attributes .'>'. $link['title'] .'</span>';
      }

      $i++;
      $output .= "</li>\n";
    }

    $output .= '</ul>';
  }
  return $output;
}
?>

Así que he añadido el href="http://drupal.org/project/nice_menus" rel="nofollow noreferrer"> Niza módulo del menú

<?php   print theme_nice_menu_primary_links() ?>

El problema es que las etiquetas de una necesidad de tener luces en el interior para permitir el marcado estado seleccionado. He probado todos los ángulos que pude encontrar para editar el menu_item_link función de Drupal que es utilizado por los menús agradables para construir los enlaces.

por ejemplo. Miré el foro de Drupal durante dos días y no hay alegría.

Las líneas en el módulo que se acumulan los enlaces son:

function theme_nice_menu_build($menu) {
  $output = '';
  // Find the active trail and pull out the menus ids.

  menu_set_active_menu_name('primary-links');
  $trail = menu_get_active_trail('primary-links');
  foreach ($trail as $item) {
    $trail_ids[] = $item['mlid'];
  }

  foreach ($menu as $menu_item) {
    $mlid = $menu_item['link']['mlid'];
    // Check to see if it is a visible menu item.
    if ($menu_item['link']['hidden'] == 0) {
      // Build class name based on menu path
      // e.g. to give each menu item individual style.
      // Strip funny symbols.
      $clean_path = str_replace(array('http://', '<', '>', '&', '=', '?', ':'), '', $menu_item['link']['href']);
      // Convert slashes to dashes.
      $clean_path = str_replace('/', '-', $clean_path);
      $class = 'menu-path-'. $clean_path;
      $class .= in_array($mlid, $trail_ids) ? ' active' : '';  
      // If it has children build a nice little tree under it.
      if ((!empty($menu_item['link']['has_children'])) && (!empty($menu_item['below']))) {
        // Keep passing children into the function 'til we get them all.
        $children = theme('nice_menu_build', $menu_item['below']);
        // Set the class to parent only of children are displayed.
        $class .= $children ? ' menuparent ' : '';
        // Add an expanded class for items in the menu trail.
        $output .= '<li id="menu-'. $mlid .'" class="'. $class .'">'. theme('menu_item_link', $menu_item['link']);
        // Build the child UL only if children are displayed for the user.
        if ($children) {
          $output .= '<ul>';
          $output .= $children;
          $output .= "</ul>\n";
        }  
        $output .= "</li>\n";
      }  
      else {
        $output .= '<li id="menu-'. $mlid .'" class="'. $class .'">'. theme('menu_item_link', $menu_item['link']) .'</li>'."\n";
      }  
    }  
  }
  return $output;
}

Como se puede ver la salida $ menu_item_link utiliza para analizar la matriz en enlaces y añadido a la clase de activo para el enlace de navegación seleccionado.

La pregunta es ¿cómo puedo añadir un lapso dentro de las etiquetas A o ¿cómo me envuelvo las etiquetas unas con una envergadura que tiene la clase activa con el estilo de los enlaces de la puerta deslizante?

¿Fue útil?

Solución

Si desea envolver las etiquetas unas con un palmo, puede sobrescribir la theme_nice_menu_build y añadir su período a la salida. Si desea dentro de la una etiqueta que necesita para sobrescribir el menu_item_link.

Se puede escribir sobre un tema Funciton por la creación de una llamada a la función your_theme_name_function_name y Drupal va a utilizar esa función para hacer que el margen de beneficio en lugar de la que viene por defecto. De esa manera usted puede alterar el marcado de la forma que desee. Esta función debe estar en el archivo template.php de su tema.

Una buena manera de empezar es copiar la función que desea sobrescribir y modificar únicamente a sus gustos.

Mucho ha sucedido desde Drupal 4.7, no espero que se utiliza. Es bastante fácil de insertar etiquetas span:

function your_theme_name_menu_item_link($link) {
  if (empty($link['localized_options'])) {
    $link['localized_options'] = array();
  }
  $link['localized_options']['html'] = TRUE;
  return l('<span>' . $link['title'] . '</span>', $link['href'], $link['localized_options']);
}

He probado esto y funciona muy bien.

scroll top