2010-10-01 17 views
1

J'ai créé un module personnalisé et j'utilise hook_block pour créer par programme des blocs.Lecture des valeurs de zone de noeud dans le code de module à l'aide de Drupal 6

Ma question est de savoir comment puis-je accéder aux valeurs de champs, y compris les champs CCK pour le nœud actuel dans mon module?

Je veux fondamentalement obtenir une valeur d'un champ CCK et utiliser la valeur lors de la construction de mon bloc pour cette page.

Répondre

3

Obtenir au nœud actuel est une douleur gênante dans le postérieur. La pratique courante est de faire quelque chose comme ceci:

if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == '') { 
    $node = node_load(arg(1)); 
    // Collect output. 
} 

arg() tire des éléments hors du chemin Drupal. Puisque tous les noeuds (quel que soit le nom qu'un alias de chemin puisse vous montrer) apparaissent à node/#, en vérifiant 'node' et que le second élément est un nombre, vous avez assez de chances d'avoir les mains sur un noeud. La vérification du troisième élément de chemin vous permet d'éviter le traitement sur le formulaire d'édition de nœud et les autres pages qui se trouvent sur un nœud spécifique.

Les valeurs de CCK sont chargés dans le nœud, et regardent habituellement quelque chose comme ceci:

// Text field. Structure also works for number fields. 
$text = $node->field_my_text_field[0]['value'] 
// Node Reference field. 
$nref = $node->field_my_nref_field[0]['nid'] 
// User Reference field. 
$uref = $node->field_my_uref_field[0]['uid'] 

L'élément de tableau « 0 » indique le delta du champ. Tout champ donné peut réellement traiter plusieurs valeurs, et la structure de tableau dans CCK suppose cette possibilité même si vous limitez le champ à une seule valeur.

+0

C'est fantastique merci. Je suis surpris qu'il n'y ait pas de fonction Drupal intégrée pour obtenir l'identifiant du nœud! – Camsoft