0 votes

Comment afficher une liste de nœuds et les détails d'un seul nœud dans Drupal ?

Je voudrais une page qui affiche une liste de nœuds (je peux faire cette partie avec le module Views) et qui affiche également les détails d'un seul nœud sous la liste. Idéalement, les détails seront mis à jour via Ajax lorsqu'un nœud de la liste est cliqué, mais le rechargement de la page serait suffisant pour commencer.

Je commence tout juste à m'intéresser à Drupal et le nombre de niveaux auxquels je peux faire des choses est quelque peu écrasant. Par exemple, doit-il s'agir d'une page d'affichage avec un bloc personnalisé en bas de page ? Une page avec deux blocs (un pour la liste, un pour l'élément) ? Si oui, comment communiqueraient-ils l'ID du nœud ? Existe-t-il déjà un module qui peut faire cela pour moi ? Peut-être devrais-je écrire mon propre module ? Et ainsi de suite. Si quelqu'un ayant une meilleure compréhension générale de Drupal pouvait m'orienter dans la bonne direction, ce serait apprécié.

Edit : Merci pour les réponses jusqu'à présent, je pense qu'elles soulignent que j'ai omis un détail important dans ma question initiale. Donc, quelques détails supplémentaires :

Je voudrais que cette page soit effectivement la page d'accueil d'un utilisateur. En tant que telle, ma vue est limitée à l'affichage des nœuds qu'ils ont créés. Modifier la page de nœuds par défaut me poserait le problème de savoir vers quel nœud envoyer l'utilisateur lorsqu'il se connecte (ce qui peut être possible, je suppose) et signifierait également que je ne pourrais probablement pas voir le nœud sans voir également la vue ?

J'ai essayé une autre approche qui consiste à créer un nœud de page qui inclut la vue (appelée user_home) en utilisant du PHP. J'ai également configuré le contrôle de la vue pour créer un lien pour chaque nœud de la liste et inclure l'identifiant du nœud dans ce lien, par ex. http://localhost/drupal-6.10/?q=node/13/12 (où 13 est l'ID du nœud de la page que j'ai créée et 12 est l'ID du nœud de l'élément de la liste).

<?php
//output the user_home view
print views_embed_view('user_home', $display_id = 'default');
?>
<br/>
<hr/>
<br/>
<?php
$queryparam = $_GET["q"];
// find the second /
$index = strpos($queryparam, '/');
$index = strpos($queryparam, '/', $index + 1);
$displayNodeId = substr($queryparam, $index + 1);
$displayNodeId = (int)$displayNodeId;

if ($displayNodeId > 0)
{
  $displayNode = node_load($displayNodeId);
  print node_view($displayNode);
}
?>

Cela fonctionne, mais je suis sûr qu'il y a une façon plus conviviale et plus conforme à Drupal de faire les choses (et l'analyse des chaînes de requête est une mauvaise manipulation).

1voto

FGM Points 1171

La solution canonique pour cela est d'utiliser un bloc dans la "région supérieure du contenu" et le nœud complet dans la région du contenu.

La façon la plus simple d'y parvenir est d'afficher la page de nœuds normalement et, avec un thème ayant la région supérieure de contenu (Garland ne l'a pas, Zen classic l'a), de créer un bloc Vues contenant la liste que vous voulez et de le placer dans cette région. Vous pouvez utiliser le chemin d'accès comme argument de la Vue afin que son contenu puisse dépendre du nœud actuellement affiché. Ensuite, définissez la visibilité du bloc pour qu'il ne réponde qu'aux conditions que vous souhaitez, probablement pour qu'il ne s'affiche que sur les pages de nœuds, ou peut-être sur les pages de nœuds d'un type de contenu spécifique. Pour cela, utilisez le mode de visibilité PHP pour le bloc, et faites quelque chose comme

// Filter args for safety
if ((arg(0) == 'node') && is_numeric(arg(1)) {
  $node = node_load(arg(1);
  return is_object($node) && ($node->type == 'the_content_type_i_want');
}
else {
  return FALSE;
}

Ainsi, le bloc ne sera affiché que lorsque vous le souhaitez.

Si votre thème ne dispose pas de cette fonctionnalité, les panneaux vous permettent de diviser la page et de placer la vue dans un panneau et le nœud complet dans un autre.

0voto

Zeke Witthaus Points 11

Je le ferais comme suit. Définissez Paramètres de visibilité spécifiques à la page pour votre bloc Views avec la liste des nœuds à afficher uniquement sur ces nœuds, Pathauto peut être utile ici aussi pour gérer un ensemble de chemins de nœuds.

0voto

CJBrew Points 1029

Le pager personnalisé pourrait vous convenir. http://drupal.org/project/custom_pagers

Vous créez d'abord une vue sur laquelle le pager doit travailler ; il peut s'agir de tous les messages d'un certain utilisateur ou de ce que vous voulez - c'est aussi flexible que n'importe quelle autre vue.

Il n'est pas nécessaire de fournir des liens avant-arrière comme pour un pager standard (et par défaut). Avec les custom_pagers, vous disposez d'une variable $nav_array avec laquelle vous pouvez jouer et qui contient tous les nœuds de votre vue.

Avec cela, vous devriez être en mesure de créer un tableau ou une liste de liens.

http://stackoverflow.com/questions/3985759/generating-secondary-menu-based-on-node-titles

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X