Snippet : afficher un bloc taxonomy / vocabulaire

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,

Je cherche un snippet qui me permettrait d'afficher un bloc sur des listes créées par les termes (taxonomie) appartenant à un même vocabulaire.

Savez vous comment je peux faie svp ?
En connaissez vous svp ?
Lequel je pourrais utiliser svp ?

Il existe des snippets pour afficher le bloc sur des nodes appartenant à un terme ou un vocabulaire, mais pas pour l'afficher sur une liste de terme.

Cordialement,

Martin

Version de Drupal : 

Salut Martin,

je ne suis pas certain de saisir ta question, pourrais-tu donner un exemple concret pour aider à la compréhension ?

Si ton bloc existe déjà, tu peux ajouter dans sa configuration non pas un code php mais une liste d'urls sur laquelle il apparaitra : si ta page liste les termes d'un vocabulaire, il s'agit certainement de la views proposée par taxonomy. Je crois que son schéma d'url est terms/tid donc tu indiques "terms/*" et ça devrait rouler.

Désolé si je réponds à côté.
A+

pour mémoire, le module taxonews permet d'afficher un bloc avec un listing relatif à un term.
sinon, views le fait très bien

en fait je comprend rien à ta phrase :-)
"un bloc sur des listes créées par les termes (taxonomie) appartenant à un même vocabulaire."

Hello,

Alors, je vais essayer de reprendre ce message et de mieux m'expliquer.

**Le contexte**

J'ai créé un bloc avec Taxonomy DHTML. C'est un module qui me permet de liste les termes d'un vocabulaire dans un bloc. En effet, je souhaite m'en servir comme sous rubrique de la rubrique blog.

J'utilise également taxonomy super select qui me permet d'afficher dans un type de contenu (dans un formulaire en fait) des cases à cocher pour sélectionner et attribuer au node un ou des termes appartenant à un vocabulaire.

Aussi, j'ai sélectionner dans la configuration du vocabulaire, la possibilité d'ajouter des termes pour le type de contenu blog.

Ainsi, ça me permet de créer OU/ET de sélectionner (malheurement pas de supprimer, mais c'est une autre problématique) des termes pour un node via le formulaire pour écrire des billets de blog (dans mon cas).

En gros c'est une solution que j'ai trouvé pour gérer les rubriques via le formulaire des billets blog. Donc quand je créé un terme supplémentaire via ce formulaire, automatiquement une sous rubrique se rajoute dans mon bloc.

**Problématique : l'affichage des blocs.**

J'en viens donc à ma problématique d'affichage des blocs : - L'affichage du bloc sur la page blog. En effet, j'ai créé une liste avec view qui m'affiche les derniers nodes du type blog. - L'affichage du bloc quand les nodes de type blog sont ouvert. En effet, lorsque des articles appartenant au blog s'ouvre, je souhaite qu'on puisse voir le menu.

Pour ces deux conditions, j'ai trouvé deux snippets que j'ai mélangé ET qui marche (!) :

<?php
 
//Affichage sur la page "blog"
 
$url = request_uri();

 
// This snippet returns TRUE if the node we are
  // currently viewing is tagged with a term which belongs
  // to the 'desired_vocab' and we are not in edit mode (arg(2)).

  // put here the vocabulary ID you're interested in
 
$desired_vocab = 9;

  if (
arg(0) == 'node' and is_numeric(arg(1)) and arg(2) == FALSE ) {
   
// Yes, we're viewing a node in view mode.

   
$node = node_load(arg(1)); // cached
    // If the term does not exist we're done
   
if (is_array($node->taxonomy)) {
      foreach (
$node->taxonomy as $term) {
        if (
$term->vid == $desired_vocab) {
          return
TRUE;
        }
      }
    }
  }

   
//Affichage sur la page "blog" 2eme partie
   
else if (strpos($url, "blog") != FALSE){
          return
TRUE;
    }

 
//Affichage sur la page "blog" 2eme partie
 
else if (strpos($url, "blog") != FALSE){
  return
TRUE;
  }

  return
FALSE;
?>

un premier qui permet d'afficher un bloc pour les nodes appartenant à un certain vocabulaire, le deuxième pour afficher le bloc sur une page.

**MAIS**

Ce que je n'arrive pas à faire et ce pourquoi je vous solicite, c'est :

Afficher le bloc pour les listes de node lié aux termes appartenant à un vocabulaire.

**RESPONSE Webastien**

J'ai bien pensé rajouter des conditions comme tu le proposes. Mais ce n'est pas une solutions durable. En effet, je propose dans le formulaire d'ajouter des termes donc d'agrandir la liste du sous menu. Je ne peux donc prévoir à l'avance les adresses exacte car malheureusement d'après ce que j'ai pu observer, elles ne sont pas construites comme ça : /vocabulaire/terme

**OUPS !!!**

Je laisse ma réponse pour ce qui souhaiterai construire ce principe de sous menu... et pour poser une autre question à la fin...

Mais je viens de réaliser que Webmastien a complétement raison !

**/OUPS !!!**

Je pensais que les adresses des termes n'avaient pas de lien avec leur vocabulaire : erreur ! Ces Adresses sont construites sous la forme : term/num_term/num_vocabulaire

En fait j'imaginais que le num du vocabulaire devait apparaître en premier dans l'URL (hiérarchiquement en fait) et je n'ai pas fait attention au fait que le num de la fin correspondait bien au numéro du vocabulaire et surtout qu'il ne changeait pas ! dsl...

Donc ma question se transforme en quelque chose de plus simple :

Comment utiliser le * (joker) dans une snippet SVP ?

Je pensais rajouter : else if (strpos($url, "term/*/9") != FALSE){ return TRUE; }

Mais ça ne marche pas... qu'est ce qui pourrait remplacer * selon vous svp ?

Merci pour l'attention que vous pourrez porter à ce post !

Codialement,

Martin

Re,

C'est fou comme dés fois on passe des heures a chercher sans trouver ... et que tout d'un coup ça y est on a tout pleins de solutions à tout pleins de choses !

En fait, il n'est pas possible d'utiliser le * dans le code php. A la place il faut utiliser la fonction arg() qui permet de récupérer les donné de l'url :
http://api.drupal.org/api/function/arg/5

Rapide résumer et traduire grossièrement de l'article :
Cette fonction retourne les répertoires du lien.

Quand on regarde une page du type "taxonomy/term//9", par exemple, arg(0) retounera "taxonomy", arg(1) retournera "term", arg(2) retournera "" et arg(4)retourne 9.

Donc dans ma situation, il a fallu que je rajoute :
else if ( arg(1) == 'term' and arg(3) == '9') { return TRUE; }

Pour afficher le bloc sur tout les termes appartenant à un vocabulaire.

Je ne sais pas si la façon dont je m'y suis pris est la meilleur mais ça parche pas mal quand même...

@Robin : est ce que taxonews marche comme taxonomy DHTML donc ?
C'est vrai que ma phrase n'était pas très claire : En fait je savais pas trop comment décrire ma situation. Les listes sont en génral créées par des views. Or là les listes dont je parlais sont celles que l'on voit quand on clique sur un terme.

Cordialement,

Martin

taxonews => me rappel plus, je l'ai testé il y a longtemps

Or là les listes dont je parlais sont celles que l'on voit quand on clique sur un terme.
=> c'est aussi une views..

mais je crois que tu as fini par trouver solution à ton problème.
++