2010-05-11 2 views
4

Comment dans le MONDE est possible? Je jure, j'ai lu l'équivalent de 3 encyclopédies en vain. J'ai essayé des solutions dans les régions, page.tpl.php et les blocs. Aucun d'entre eux ne me donne ce dont j'ai besoin ... et je sais qu'il y a tellement d'autres personnes qui en ont besoin!Drupal 6: Imprimer les liens primaires non adultérés et tous les enfants

Je suis arrivé à la conclusion que je veux imprimer le menu dans mon page.tpl.php ... donc pas de solutions de bloc, s'il vous plaît. Je veux être en mesure de parcourir les liens du menu principal (enfants AND) et de réécrire la sortie afin qu'il n'y ait pas de marquage de classe Drupal par défaut. Le plus proche que j'ai trouvé cet exemple est:

<?php if (is_array($primary_links)) : ?> 
<ul id="sliding-navigation"> 
<?php foreach ($primary_links as $link): ?> 
<li class="sliding-element"><?php   
     $href = $link['href'] == "<front>" ? base_path() : base_path() . drupal_get_path_alias($link['href']); 
     print "<a href='" . $href . "'>" . $link['title'] . "</a>";    
     ?></li> 
<?php endforeach; ?> 
</ul> 
<?php endif; ?> 

Comme vous pouvez le voir, des liens sont réimprimés avec une coutume UL et classe LI ... c'est génial! Cependant, aucun enfant n'est en cours d'impression. Comment pourrais-je étendre ce code pour que tous les enfants fassent partie de la liste? NOTE: Je ne veux pas que les enfants n'apparaissent que sur leur page parente, ils doivent être présents tout le temps. Sinon, le menu déroulant que j'ai prévu est inutile.

Je vous remercie sincèrement à l'avance de diminuer mon mal de tête gargantuesque!

Répondre

5

Il est difficile d'affecter la sortie une fois que vous avez atteint la page page.tpl - vous feriez peut-être mieux de rechercher les fonctions de template.php.

C'est celui que je l'habitude de modifier les classes de mes liens primaires:

function primary_links_add_icons() { 
    $links = menu_primary_links(); 
    $level_tmp = explode('-', key($links)); 
    $level = $level_tmp[0]; 
    $output = "<ul class=\"links-$level\">\n"; 
    if ($links) { 
    foreach ($links as $link) { 
     $link = l($link['title'], $link['href'], $link['attributes'], $link['query'], $link['fragment']); 
     $output .= '<li class="sublevel">' . $link .'</li>'; 
    }; 
    $output .= '</ul>'; 
    } 
    return $output; 
} 

Et puis dans page.tpl.php Je viens d'appeler comme ceci:

<?php if ($primary_links) :?> 
    <?php print '<div id="menu">'; ?> 
    <?php print primary_links_add_icons(); ?> 
    <?php print '</div>'; ?> 
<?php endif;?> 
+0

Cela affecte-t-il tous les menus dans Drupal? L'un des problèmes que j'éprouvais lors de l'écrasement des liens comme celui-ci était qu'il a même effectué les liens dans mon sidebar ... ennuyeux. – dcolumbus

+0

Non, cela ne devrait affecter que vos liens primaires - car la fonction template.php ne s'occupe que de ceux-ci. Avez-vous utilisé ce code et était-ce l'effet? – MrFidge

+0

Je m'excuse ... J'ai vu plusieurs fonctions similaires au cours de la semaine dernière que tout se mélange dans mon esprit. "primary_links_add_icons" affecte uniquement les liens primaires, oui. Je vous remercie. – dcolumbus

1

je devais ajouter un <span> à mes liens pour le style, donc j'ai outrepassé theme_links() dans includes/theme.inc Vous pouvez copier la fonction à votre template.php, la renommer en yourthemename_links(), et la modifier au besoin. Cette fonction génère les tags ul, li, drupal_attributes, classes de 'first', 'last', 'active', etc., et affecte les menus sur l'ensemble du site.

Vous pouvez également consulter les fonctions includes/menu.inc, y compris theme_menu_local_tasks() et menu_local_tasks(), si vous avez besoin pour produire le différemment primaire et secondaire. MarkLNH

+0

Est-ce une bonne pratique pour les thèmes Drupal 7? – dcolumbus