Frage

Ich versuche, einem Drupal -Thema Dropdown -Menüs hinzuzufügen, bei dem die CSS -Rundung von Text -Schiebetüren verwendet wird.

Die aktuelle Version verwendet eine primäre Links -Injektion der Spannweite in die A -Tags, die einwandfrei funktioniert. Unterstützt jedoch keine Drop -Down -Menüs.

Arbeitscode:

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

In der Vorlage mit einer Dateiabnahme von 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;
}
?>

Also habe ich das hinzugefügt Schönes Menümodul Dies funktioniert gut und ermöglicht die Dropdown -Menüfunktionen für meine Navigation, die nun mit der Vorlage mit der Vorlage behandelt wird:

<?php   print theme_nice_menu_primary_links() ?>

Das Problem ist, dass die A -Tags Spannweiten im Inneren haben müssen, um das ausgewählte Zustandsmarkup zu ermöglichen. Ich habe jeden Winkel ausprobiert, den ich finden konnte, um das Drupal -Funktionsmenü zu bearbeiten, der von netten Menüs zum Erstellen der Links verwendet wird.

ZB ich habe mir zwei Tage lang das Drupal -Forum angesehen und keine Freude.

Die Linien im Modul, die die Links erstellen, sind:

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;
}

Wie Sie sehen können, verwendet der $ Ausgang muser_item_link, um das Array in Links zu analysieren und die Aktivität der aktiven Navigationslink hinzuzufügen.

Die Frage ist, wie ich in den A -Tags eine Spannweite hinzufüge oder wie ich die A -Tags mit einer Spannweite wickle, die die aktive Klasse hat, um die Schiebetür -Links zu stylen.

War es hilfreich?

Lösung

Wenn Sie die A -Tags mit einer Spannweite einwickeln möchten, können Sie das überschreiben theme_nice_menu_build und fügen Sie Ihre Spannweite der Ausgabe hinzu. Wenn Sie in das A -Tag möchten, müssen Sie das überschreiben menu_item_link.

Sie können einen Themenfunktionen durch Erstellen eines Funktionsaufrufs überschreiben your_theme_name_function_name und Drupal wird diese Funktion verwenden, um das Markup anstelle der Standardeinstellung zu rendern. Auf diese Weise können Sie das Markup so ändern, wie Sie es wollen. Diese Funktion sollte in der Datei template.php Ihres Themas enthalten sein.

Eine gute Möglichkeit, die Funktion zu kopieren, die Sie überschreiben möchten, und sich einfach auf Ihre Vorliebe zu ändern.

Seit Drupal 4.7 ist viel passiert. Ich hoffe nicht, dass Sie das verwenden. Es ist ziemlich einfach, Span -Tags einzufügen:

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']);
}

Ich habe das getestet und es funktioniert gut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top