menu / path d'un node par taxonomie

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

J'ai créé un type de node (appelons-le nouvelle) qui contient un champ taxonomie (disons que le vocabulaire est équipe.
À chaque fois que je créé une nouvelle, elle est donc affectée à une équipe. J'aimerais que le chemin (path) et le menu (éventuellement) soit directement généré par l'identifiant (ou le titre) de la nouvelle, et par le nom de l'équipe.

Par exemple, si j'ai une nouvelle "On a acheté des stylos", et qu'on lui a attribué l'équipe "comptabilité", j'aimerais bien que l'URL soit un truc du genre http://exemple.com/equipes/comptabilite/nouvelles/on-a-achete-des-stylos

J'ai repéré pathauto, mais je ne comprends pas comment modifier le chemin en fonction de l'équipe qui aura été associée à mon node.

Pourriez-vous me suggérer une manière de résoudre ce dilemme ?

Tags : 

Bonjour,

Il me semble que pathauto et les tokens vont pouvoir t'aider : (suppose que tu ai le module token activé).

Dans ton admin : /admin/build/path/pathauto , pour la ligne qui correspond à ton type de contenu, tu peux mettre quelque chose comme
[vocab-raw]/[termpath-raw]/[title-raw]

(attention, je débute, c'est peut-être pas parfait)

oui, mon message précédent n'était pas complet.

d'une part, le lien vers les catégories : (tiré de ma config).

  • node path : pour le contenu : news/[termpath-raw]/[title-raw]
  • Pour lister les contenus de chaque catégorie : taxonomie path : news/[catpath-raw]/

En adaptant, ça marchera, ça fonctionne au poil chez moi.
Note, je n'ai qu'un seul niveau, je ne sais pas si c'est correcte pour plusieurs niveaux.

après moi, j'ai ajouté une vue pour la page 'news' (listing de l'ensemble des catégories + un bloc avec les catégories affichées) (les 2 réalisés avec view mais là on s'éloigne un peu du sujet

yep,
de rien, je l'ai fais la veille de ma première réponse.
Il y a peut-être d'autres façon de faire mais ça me parait assez logique comme ça.

A noter, il ne faut pas oublier de supprimer les alias déjà présent si vous faites de mauvaises manip avant.

Bye.

hey, je vois qu'on fait fasse exactement aux mêmes problématiques !

J'ai failli poser une nouvelle question et je pense qu'il va falloir le faire car je n'ai rien trouvé de concluant non plus.
J'ai presque fait une vue mais il est possible de retrouver le parent d'un terme mais pas les enfants, je pense que je vais explorer cette piste car j'ai aussi tenté le module 'Taxonomy menu' mais il m'a pas l'air stable du tout (entrée dupliquées dès les premières manip). Donc je cherche aussi depuis le début d'après midi ...
Tiens moi au courant, si tu trouve ton bonheur (dans un autre sujet, pour pas faire le bazar...)

En apparté, J'ai mi en place le module Taxonomy breadcrumb pour le fil d'ariane justement, et lui fonctionne très bien.

Pour ma part, j'ai tenté de suivre les pistes offertes par menu_set_item, en m'inspirant d'une proposition trouvée ici http://drupal.org/node/369854 (il existe aussi une page détaillant la même idée en français). Mais ce n'est pas concluant. Tout semble bien marcher, je récupère mon item de menu, mais après l'affectation, le menu n'est pas mis à jour. Je suspecte que ça vient du fait que l'item de menu n'en est pas vraiment un (il est construit automatiquement)...

function montheme_preprocess_node(&$variables) {
  // si c'est une news
  $node = $variables['node'];
  if ($node->type == "teamnews") {
    // paramétrer le menu par défaut si besoin.
      _set_default_menu_teamnews($node->path, $node->field_team[0]["view"], $node->title);
  }

}

/
* Un menu est défini pour la plupart des items. Mais nous
* devons en définir un pour ceux qui n'en ont pas. 
*/
function _set_default_menu_teamnews($path, $team, $title){
    if (!node_has_menu($path)) {
        $menu = _find_default_menu_teamnews($path, $team, $title);
    }
}

// le node a-t-il un menu ?
function node_has_menu($path) {
    $sql = "SELECT 'TRUE' FROM menu_links ";
    $sql .= "WHERE menu_name IN ('navigation') AND ";
    $sql .= "link_path = '%s'";
    $result = db_result(db_query($sql, $path));
    return $result;
}

/
* Ici, le menu par défaut existe. Vous pouvez trouver votre
* menu par défaut de différentes façons,
* par l'utilisation d'une taxonomy existante appliquée à un
* node ou par n'importe quel autre champ appliqué au node, ou
* même par une variable par défaut.
*/
function _find_default_menu_teamnews($path, $team, $title) {
    $router_item = menu_get_item("team/".$team."/news/");

    if($router_item) {
        menu_set_item($path, $router_item);
    }
}

En fait taxonomy_menu n'est pas si mal, ça dysfonctionne un peu au départ, en particulier quand on change les options ou le menu dans lequel ce menu est présenté mais avec un nettoyage de base de données DELETE FROM menu_links WHERE module = 'taxonomy_menu', on peut s'en contenter. (http://drupal.org/node/758198)
.
Voilà, on s'éloigne du sujet donc j'arrete sur ce point.