2010-10-09 5 views
1

Sur my blog J'ai une série de messages sur un sujet commun que je voudrais relier avec un bloc de navigation commun, de sorte que les lecteurs peuvent facilement sauter en avant ou en arrière à travers la série.Comment afficher le bloc NodeQueue sur les nœuds inclus?

J'ai utilisé NodeQueue pour collecter toutes les entrées de blog en séquence. Mettre le bloc associé dans ma barre latérale me donne la navigation que je veux MAIS le bloc apparaît sur chaque page de mon site. Ce que je veux faire est de limiter la visibilité du bloc afin qu'il n'apparaisse que sur les pages qui sont incluses dans la file d'attente. Comment puis-je faire ceci?

Je sais que NodeQueue crée ses blocs en utilisant Views, donc je suppose que la réponse pourrait être plus à faire en utilisant Views que NodeQueue. S'il y a un module qui fait ce dont j'ai besoin, ce serait génial. Si la réponse nécessite PHP (par exemple, pour configurer la visibilité du bloc), j'aurai besoin d'une prise en main.

Le blog fonctionne sur Drupal 6.19 et j'ai une instance de test sur laquelle je peux essayer avant de toucher le site en ligne.

+0

Je pense avoir une réponse qui pourrait vous satisfaire. Mais avant cela, est-ce important si a. le bloc d'histoires associées est _not_ dans votre barre latérale, mais à la fin de l'entrée de blog b. L'ordre des articles affichés est-il important? c. Est-ce correct/pas ok si l'histoire que vous regardez actuellement est répétée comme un lien dans la liste des histoires connexes? Ou devrait-il être omis de la liste des histoires partie de la série –

+0

@NoParrots - intéressant. Pour répondre à vos questions: À la fin de mon blog serait Ok, mais pas idéal; L'ordre des postes est important - certains sont une série technique où chacun se fonde sur ce qui s'est passé auparavant; Le message que vous consultez actuellement doit être affiché, en tant que contexte pour l'endroit où vous vous trouvez dans la séquence. – Bevan

Répondre

0

Je n'ai pas réellement joué avec NodeQueue, mais selon votre description, cela ressemble à quelque chose que vous devriez être capable de faire en utilisant des vues. Quelques pensées.

Si vous utilisez un type de contenu distinct uniquement pour les entrées de blog, vous devriez pouvoir ajouter ce type de contenu en tant que filtre dans la vue. Ce serait probablement le plus simple.

Si vous ne pouvez pas faire cela, alors je verrais si vous pouvez ajouter un filtre pour NodeQueue car cela devrait aussi fonctionner.

Si aucun des éléments ci-dessus ne fonctionne, je vérifierais si vous pouvez ajouter une relation à NodeQueue. En faisant cela, vous pourrez probablement ajouter un filtre pour NodeQueue. Enfin, si vous n'obtenez pas de réponse satisfaisante ici, je vous suggère de poser votre question sur Drupal.org car c'est là que beaucoup d'experts en drupal répondent aux questions.

+0

Le bloc lui-même fonctionne comme je le souhaite - il liste tous les nœuds que j'ai répertoriés dans la file d'attente. Cela est effectué via une vue en utilisant une relation de la file d'attente vers les nœuds inclus. Ce que je veux faire est de cacher/montrer le bloc sur différentes pages du site, selon que le nœud montré sur la page est un membre de la file d'attente. – Bevan

+0

D'oh! Désolé, je ne sais pas pourquoi je pensais que c'était une réponse à votre question. Vous pourriez jeter un coup d'oeil au module contextuel. Je crois que c'est censé donner plus de contrôle sur l'endroit où les blocs apparaissent. –

+0

De même, si vous décidez de créer un extrait php, l'une des façons de réduire le code dans le bloc est de placer l'extrait dans une fonction thématique, puis d'appeler le thème ("the_snippet_function") du bloc. –

1

La visibilité des blocs n'a rien à voir avec le contenu. Si vous vouliez afficher un bloc statique pour les noeuds de la file d'attente, ce serait tout aussi difficile.

Je vois des solutions possibles.

  • taper manuellement dans les nœuds du paramètre de visibilité du bloc et sélectionnez exposées dans les pages indiquées
  • créer un script PHP pour tester si l'utilisateur voit un nœud, la requête du db pour voir si elle est dans la file d'attente. (Je n'aime pas cette approche)

Le premier donne plus de gestion, mais le dernier peut facilement se casser de toute façon et je n'aime pas stocker du code dans la base de données.

+0

Bien que vous ayez le problème inversé - Je veux afficher le bloc nodequeue pour tous les blocs de la file, pas un bloc statique - vous avez au moins trouvé une solution: Liste manuelle de tous les noeuds de la file dans les paramètres de visibilité du bloc sous "Afficher sur les pages répertoriées". Pas spécialement bien rangé - et une solution qui nécessite beaucoup d'entretien manuel. Pourtant, une solution qui fonctionne bat tout ce qui ne fonctionne pas. Merci. – Bevan

+1

@Bevan Vous avez mal interprété ma réponse. Mon point de vue était que peu importe le bloc que vous voulez afficher sur les nœuds nodequeue, les outils pour le faire sont les mêmes. Si vous changez beaucoup les nœuds dans la file d'attente, vous pouvez envisager la solution php. Vous devez interroger la table nodequeue_nodes pour voir si le nœud actuel est dans la file d'attente. – googletorp

+0

Vous avez raison, j'ai mal lu votre réponse. Pour l'instant, je vais lister manuellement les noeuds - mes compétences PHP sont à côté de non-existantes, mais je pourrais juste besoin d'apprendre. – Bevan

1

Ok, c'est une solution légèrement longue mais je pense élégante. J'espère que ça ne vous effraie pas - Ce n'est vraiment pas complexe mais contrairement au code c'est difficile à expliquer dans le texte. C'était amusant de comprendre cela. Cette réponse fonctionne dans Views version 2 ou supérieure.Essentiellement, la solution combine deux modules

  1. Vues attach (http://drupal.org/project/views_attach)
  2. nodequeue (plus spécifiquement la taxonomie des files d'attente)

S'il vous plaît lire sur les vues attacher avant d'aller plus loin. Les vues join sont mieux expliquées par cette vidéo.

Une file d'attente de taxinomie n'est rien d'autre qu'une Nodequeue créée automatiquement pour chaque terme de taxonomie dans un vocabulaire. Disons que nous avons une nodequeue de taxonomie appelée My Lists. Disons que vous avez un Vocabulaire appelé Series et il a 3 termes: Apache Solr Tutorial Series, CSS Tips and Techniques Series, Drupal Views Tips Series. Et si My Lists utilise la Series comme source de taxonomie, 3 sous-files d'attente seront créées - une pour chaque terme.

Sur votre blog, vous aurez plusieurs séries d'articles (vous appelez cela des articles avec un "sujet commun"). Chaque série sera indépendante d'une autre série. Chaque série contiendra des listes de 2 blogs ou plus. Il est important de noter que dans ma proposition de solution, un blog ne pourra faire partie que d'une série - j'espère que c'est correct. Nous utilisons une solution basée sur Nodequeue en raison de votre exigence que l'ordre de la liste des blogs de la série est important et doit être préservé.

D'abord vous devrez créer un vocabulaire (disons que nous l'appelons Series). Chaque fois que vous créez une nouvelle série de blogs, vous créez un nouveau terme de taxonomie, par exemple. Apache Solr Tutorials Series, CSS Tips and Techniques Series etc. Assurez-vous que le vocabulaire Series s'applique à votre type de contenu blog.

Vous devez maintenant créer une file d'attente de taxonomie. Activez simplement dans la liste des modules. Il est livré avec un module Nodequeue standard. Cliquez sur Gestion de contenu> Nodequeue> file d'attente de taxonomie. Nommez la file d'attente My Lists. Assurez-vous de sélectionner Series comme Vocabulaire. Vous pouvez laisser la longueur de la file d'attente à 0 (illimité) car chaque série de blogs peut contenir un nombre quelconque de blogs. Maintenant:

  1. Link "add to queue" text: mis Add to %subqueue
  2. Link "remove from" queue text: mis Remove from %subqueue

C'est un peu une chose pratique. Il vous donnera des liens au bas de chaque nœud blog pour ajouter ou supprimer de la file d'attente de taxonomie appropriée. Ainsi, si un article de blog a obtenu le terme taxonomie CSS Tips and Techniques, il recevra un lien en bas de la page de nœud complet (ou même une vue teaser) afin qu'il puisse être ajouté à la sous-file CSS Tips and Techniques dans la file d'attente My Lists.

Ceci termine la configuration pour les files d'attente de taxonomie.

Maintenant, nous arrivons à Views attach. Veuillez activer le module d'affichage des vues avant de continuer. Essentiellement Views attach attache une vue à la fin du nœud. Dans notre cas, notre vue sera une liste d'autres articles de la série (seulement si le blog fait partie d'une série).

Nous aurons essentiellement besoin de "passer" le terme de taxonomie du noeud à la vue. Ce terme de taxonomie sélectionne la sous-file appropriée dans la file d'attente My Lists.Tous les éléments de cette sous-file seront affichés dans l'ordre exact que vous avez spécifié (via l'interface Nodequeue standard).

Étapes pour créer la vue.

  1. Appelons la vue display_other_blogs_in_series.
  2. Ajoutez un affichage de type Node Content (disponible après l'activation des vues jointes). C'est un affichage juste comme le bloc et la page affiche mais avec la capacité spéciale de s'attacher au noeud.

Effectuez les réglages suivants dans le Node Content Display

Node content settings 
Node types: blog 
Build modes: Teaser, Full node 
Arguments: token 
Show title: No 

Vous devez sélectionner Use tokens from the node the view is attached to sous Arguments. Laissez le jeton être [term-id] Ceci est le "ID du terme de top taxonomie". C'est très important!! Essentiellement, vous allez passer le terme de taxonomie du nœud de blog à partir du vocabulaire Series (par exemple, CSS Tips and Techniques) comme argument de la vue. Pour que cela se produise, le vocabulaire Series doit avoir le poids le plus faible. (Voir http://groups.drupal.org/node/11788#comment-38332). S'il a le poids le plus faible, le vocabulaire de taxonomie sera le premier vocabulaire de la section taxonomie de votre formulaire d'édition de nœud.

Maintenant, nous devons indiquer à notre vue de prendre seulement des éléments de la file d'attente My Lists. Ajouter une relation Nodequeue: Queue. Assurez-vous que [x] Require this relationship est sélectionné. Assurez-vous que [x] Limit to one or more queues est sélectionné avec My list comme file d'attente. Ajouter un argument Nodequeue: Subqueue Reference. Assurez-vous que la relation est queue, c'est-à-dire la relation que nous avons définie ci-dessus. Cet argument va être le terme de taxonomie du vocabulaire Series. Cet argument entraînera la sélection de la sous-file correcte.

Ajoutez les champs qui vous intéressent par ex. Node: Title. Assurez-vous que le Node: Title est transformé en un lien hypertexte en cochant Link this field to its Node

Ajoutez Nodequeue: Position comme critère de tri. Assurez-vous que l'ordre de tri est ascendant et assurez-vous que la relation queue est utilisée.

Dans les filtres, assurez-vous d'ajouter Node: Type = blog en tant que votre filtre.

Alors, que ce point de vue va faire est:

  1. Prenez le terme de taxonomie du vocabulaire Series dans le nœud qui est actuellement en cours de visualisation
  2. passe que comme argument à la vue display_other_blogs_in_series
  3. La vue utilisera cet argument pour sélectionner la sous-file appropriée dans la file d'attente My Lists
  4. Les éléments de la sous-file seront listés un par un exactement dans l'ordre que vous avez spécifié
  5. Cela apparaîtra correctement dans chaque blog qui fait partie d'une série particulière

Thats it!

Postscript: Si vous utilisez Vues 3 (actuellement à alpha3 au moment de l'écriture) et vous voulez un bloc (en ce moment les articles connexes viennent à la fin du corps de noeud) que vous pouvez faire il de la façon suivante:

  1. Oublier vue attacher ... ce ne est pas nécessaire
  2. Ajouter un bloc. Il doit contenir les mêmes arguments, relations, champs et filtres que les instructions ci-dessus pour l'affichage Node Content.
  3. Vous devez modifier légèrement les paramètres de l'argument Nodequeue: Subqueue Reference: Sous Action to take if argument is not present:, choisissez [x] Provide Default Argument. Choisissez [x] Taxonomy Term ID from URL. Maintenant, assurez-vous que [] Load default argument from term page n'est pas sélectionné et [x] Load default argument from node page, thats good for related taxonomy blocks. Aussi [x]Limit terms by vocabulary et choisissez le vocabulaire Series.
  4. Assurez-vous de nommer le bloc et de le placer dans la région appropriée.
+0

Une belle solution élégante - je vais essayer dans mon bac à sable. – Bevan

+0

@Bevan: un petit point au cas où vous n'auriez pas travaillé avec des files d'attente de taxonomie auparavant. Une sous-file n'est explicitement créée que lorsque vous ajoutez à la file d'attente. Pour ce faire pour la première fois, cliquez sur le lien "ajouter au " qui apparaîtra sous chaque noeud de blog. Vous devez spécifier le terme 'Series' dans le formulaire d'édition de noeud pour ce blog avant cela. –

+0

@Bevan: ajout d'instructions pour ajouter la série dans un bloc. Il nécessite des vues 3. –

Questions connexes