web-dev-qa-db-fra.com

Comment puis-je injecter un menu de taxonomie en tant que sous-menu d'un élément de menu standard?

J'ai un menu principal, avec une structure de haut niveau semblable à la suivante:

Home - Categories - Something Else - ... - Contact

Chacun de ces liens de niveau supérieur va à une page de nœud appropriée.

J'ai un vocabulaire pour les catégories (multi-niveaux), et j'ai besoin d'obtenir ces termes de taxonomie dans un sous-menu sous l'élément "Catégories". Je voudrais éviter de coder en dur les éléments dans le menu principal, car le sous-menu devrait augmenter/diminuer comme le vocabulaire.

Dans le passé, j'ai écrit un code trop élaboré pour accomplir cela, qui se connecte aux opérations de taxonomie et gère les sous-éléments d'un menu particulier en fonction de cela (très similaire à ce que fait Menu Taxonomy , mais sans avoir d'avoir un menu différent pour chaque vocabulaire).

Bien que cette méthode fonctionne, elle n'est pas idéale et certainement pas générique. Je ne peux pas simplement soulever ce code de l'ancien projet vers le nouveau, cela nécessiterait une quantité raisonnable de personnalisation.

Je ne peux m'empêcher de penser qu'il doit y avoir une solution "standard", basée sur des modules.

J'ai vu quelques suggestions pour utiliser un tas de modules différents en combinaison (même certains suggérant d'utiliser des modules basés sur Views, étrangement). Je suis ouvert à toute suggestion, mais si cela implique d'installer plus de 1 ou 2 modules et une charge de configuration codée en dur et spécifique au contexte, cela ne va probablement pas aider trop dans ce cas.

12
Clive

Option a) À moins que je ne me trompe, ne pouvez-vous pas simplement choisir où votre menu de taxonomie sera parenté (emplacement du menu) lorsque vous le créez? Le seul problème que je pense que vous pourriez rencontrer est que je pense qu'il vous oblige à reconstruire le menu chaque fois que la taxonomie est mise à jour

Option b) J'ai fait quelque chose de raisonnablement similaire à cela sur mon site, j'ai utilisé le module Vues de men , pour me permettre de mettre une vue dans mon menu principal.

Si vous créez une nouvelle vue qui répertorie tous vos termes de taxonomie, en tant qu'affichage de bloc, appliquez un filtrage/modification supplémentaire dans la vue si nécessaire (vous ne pouvez pas, mais dans mon exemple, je le voulais). Ensuite, lorsque vous ajoutez un nouveau lien à votre menu principal, vous pouvez choisir d'utiliser une vue plutôt qu'un lien. De là, vous choisissez la vue que vous souhaitez utiliser, sélectionnez l'élément de menu 'Catégorie' comme parent et enregistrez (après avoir enregistré, vous devez ensuite l'activer dans le menu, ce qui semble être un bug avec le module lui-même)

Je ne peux pas garantir que c'est la meilleure solution pour vous, mais cela a fonctionné quand je viens de la tester

13
Andrew Morris

Menupoly possède une API pour des "sources d'arborescence de menus" personnalisées. Je n'ai jamais vraiment utilisé cela pour autre chose que des liens de menu, donc il pourrait y avoir des problèmes que nous devons résoudre en cours de route. Mais l'architecture de base est là.

Si vous suivez cette voie, vous

  • Utilisez votre menu principal existant, sans aucun lien de terme de taxonomie au-delà de la page "Catégories".
  • Créez votre arbre de taxonomie indépendamment de cela.
  • Écrivez une "source d'arborescence de menu" personnalisée qui récupère à partir de menu_links comme d'habitude, mais quand il trouve un terme de taxonomie, il récupère à partir de la taxonomie.
    Donc, d'une manière ou d'une autre, vous devez être en mesure de détecter que le lien "Catégories" est lié à la taxonomie.
  • Si un lien de menu est lié à la taxonomie et a en même temps un sous-menu régulier, vous devez en quelque sorte mélanger les deux types d'enfants ensemble.

Cette route serait un peu de travail, mais elle pourrait être utile pour d'autres, et elle est probablement plus élégante et réutilisable que votre logique spécifique au site.

Actuellement, il n'existe même pas de "source d'arborescence de menus" uniquement taxonomique, donc ce serait peut-être une première étape raisonnable avant de commencer avec un plugin mixte.

3
donquixote

J'ai récemment fait quelque chose de similaire pour un menu de catégories de produits. Ce n'était que pour 1 niveau de profondeur, mais pourrait facilement être modifié pour afficher d'autres niveaux.

/**
 * Implements theme_menu_link().
 */
function THEME_menu_link__main_menu($variables) {

  $sub_menu = '';
  $element = $variables['element'];
  $menu_string = $element['#title'];

  if (module_load_include('inc','pathauto','pathauto') !== FALSE) {
    $menu_string =  pathauto_cleanstring($menu_string);
  }

  if ($menu_string == 'categories') {
    $sub_menu = get_categories_menu();
  }

  if ($sub_menu) {
    $element['#attributes']['class'][] = 'haschildren';
  }

  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}

function get_categories_menu() {

  $current_category = arg(2); // Get current category from path
  $volcab = taxonomy_vocabulary_machine_name_load('product-categories');
  $tree = taxonomy_get_tree($volcab->vid,0,1);

  $output = '<ul class="menu product-category">';
  foreach ($tree as $term) {
    $safe_term = pathauto_cleanstring($term->name);
    $class = ($current_category==$safe_term) ? ' class="active"' : '';
    $output .= '<li><a' . $class . ' href="/path/to/' . $safe_term . '">' . $term->name . '</a></li>';
  }
  $output .= '</ul>';

  return $output;
}

La fonction get_category_menu est mieux gérée comme un bloc, mais présentée ici comme une autre fonction dans le template.php pour plus de commodité.

J'espère que cela aide ou est au moins un pas vers une solution.

Paul

2
paul.linney

Metro Menus répondra à vos besoins et même il a les skins intégrés et peut créer les vôtres qui agissent de la même manière que les menus Nice. Avec ce module, vous pouvez sélectionner tous les sous-éléments avec n'importe quelle profondeur dans le menu ou la taxonomie et je ne l'utilise pas avant.

Compatibilité avec écran tactile (iPad, iPhone et etc.).

enter image description here

2
Bala

Vous pouvez utiliser le module menu Om Maxi pour le même. Il permettra à l'administrateur de créer des menus avec des blocs que vous souhaitez comme pièces jointes, des modules tels que des vues, un diaporama, un menu, un utilisateur, de jolis menus, des onglets rapides et des blocs personnalisés avec des tableaux, des listes, des images, des vidéos, etc.

Vous pouvez créer un menu séparé en utilisant Menu Taxonomy et pouvez attacher ce menu en tant que sous-liens au menu généré par om maxi menu.

Merci

2
Jayendra Kainthola