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

12

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 le menu de taxonomie , mais sans avoir à 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.

Clive
la source
1
Je pense que je l'ai vu ... Un sujet similaire contient une idée sur l'utilisation de règles pour créer des éléments basés sur la taxonomie dans le menu, mais cela semble loin d'être idéal aussi.
Mołot
Si j'ai bien compris, regardez-vous comme ce module drupal.org/project/taxonomy_treemenu , il peut s'intégrer avec un joli menu mais pour D6
Bala
Devez-vous avoir des éléments de menu réels ou est-il viable d'ajouter l'arborescence des termes de taxonomie dans le menu lors de son rendu?
rooby
Merci @Bala, besoin d'une solution D7
Clive
1
Clive J'ai une suggestion. Comme je sais, vous pouvez générer un menu taxonomu avec le nom de vocabulaire inclus, puis ajouter simplement d'autres liens de menu directement dans le menu généré. Les éléments de taxonomie peuvent être mis à jour automatiquement ... Je ne sais pas si cela fonctionnera, essayez-le.
milkovsky

Réponses:

13

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 que cela vous oblige à reconstruire le menu chaque fois que la taxonomie est mise à jour

Option b) J'ai fait quelque chose d'assez similaire à cela sur mon site, j'ai utilisé le module Vues de menu , 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

Andrew Morris
la source
1
Oui, il s'avère que j'ai été plutôt stupide - le menu Taxonomy a cette fonctionnalité exacte intégrée (votre option a). Le menu particulier que je traite est assez petit, et les catégories ne changeront pas souvent, donc la reconstruction n'est pas un problème. Merci beaucoup pour le test de santé mentale
Clive
3

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.

don Quichotte
la source
Cela étant dit, la réponse acceptée par Andrew Morris pourrait être parfaitement bonne. Et cela signifie moins de travail pour moi :) Je voulais toujours publier ceci pour quiconque pourrait le trouver utile.
donquixote
V. intéressant, merci. La réponse acceptée fait très bien le travail mais je suis très intéressé à obtenir des solutions de code aussi. Puis-je supposer que si l'un de vos modules est entièrement basé sur la qualité PSR-0? :)
Clive
Celui-ci utilise le mode de compatibilité PHP 5.2 de xautoload, qui est un peu comme PEAR mais avec des répertoires peu profonds. Donc, pas PSR approuvé. Je pourrais aller PSR-0 un jour ..
donquixote
bien que je sois très intéressé par PSR-X (qui pourrait malheureusement ne jamais entrer en D8)
donquixote
2

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 de beaux menus. Avec ce module, vous pouvez sélectionner n'importe quel sous-élément avec n'importe quelle profondeur dans le menu ou la taxonomie et je ne l'utilise pas auparavant.

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

entrez la description de l'image ici

Bala
la source
2

Vous pouvez utiliser le module de 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é à l'aide du menu Taxonomie et pouvez attacher ce menu en tant que sous-liens au menu généré par om maxi menu.

Merci

Jayendra Kainthola
la source
2

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="/drupal//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

paul.linney
la source