2010-09-11 6 views
0

J'ai un problème étrange avec hook_view. Le problème est que hook_view n'est invoqué que si hook_load renvoie une valeur non valide, telle qu'une variable vide. Je ne sais pas ce qui provoque cela et je suis à bout de nerfs. J'apprécie beaucoup votre aide. Pour ce qui vaut la peine, j'ai un module de connexion d'image installé.Bizarre problème avec hook_view drupal

Drupal 6.x

MISE À JOUR

function mymodule_node_info(){ 
return array(
     'nodetype1' => array(
     'name' => t('nodetype1'), 
     'module' => 'mymodule_nodetype1', 
     'description' => t('....'), 
     'has_title' => TRUE, 
     'title_label' => t('Title'), 
     'has_body' => TRUE, 
     'body_label' => t('Body'), 
    ), 
    'nodetype2' => array(
     ...... 
     'module' => 'mymodule_nodetype2', 
     ...... 
    ), 
    'nodetype3' => array(
     ...... 
     'module' => 'mymodule_nodetype3', 
     ...... 
    ), 
    'nodetype4' => array(
     ...... 
     'module' => 'mymodule_nodetype4', 
     ....... 
    ), 
); 

} 

function mymodule_nodetype1_load($node){ 
    $query = 'SELECT f1,f2,...,f10 FROM {tb1} INNER JOIN {tb2} ON {tb1}.vid = {tb2}.vid WHERE {tb1}.vid = %d'; 

    $result = db_query($query,$node->vid); 

    return db_fetch_object($result); 
} 

function mymodule_nodetype1_view($node, $teaser = FALSE, $page = FALSE){ 
    $node = node_prepare($node, $teaser); // get it ready for display 

    $f1 = check_markup($node->f1); 
    .............. 
    $f10 = check_markup($node->f10); 

    // Add theme stuff here 
    $node->content['mycontent'] = array(
     '#value' => theme('defaultskin', $f1,...,$f10), 
     '#weight' => 1, 
    ); 

    return $node; 
} 

function mymodule_theme(){ 
    return array(
     'defaultskin' => array(
      'template' => 'node-defaultskin', 
      'arguments' => array(    
       'f1' => NULL, 
       ...... 
       'f10' => NULL, 
      ), 
     ), 
    ); 
} 
+0

Essayez-vous de rendre le noeud? – tamasd

+0

Pouvez-vous élaborer? Parce que je ne suis pas sûr de ce que vous voulez dire. Mais, si vous demandez si je vois le contenu dans la vue de noeud, oui je fais. hook_view n'est invoqué ni dans la vue view - teaser, ni dans la vue node. – Andrew

+0

Veuillez fournir le code. –

Répondre

1

J'ai trouvé le coupable. Juste au cas où quelqu'un rencontrerait le même problème, voici pourquoi - J'ai nommé un champ comme "TYPE" et, quand j'ai récupéré le jeu d'enregistrements dans hook_load avec drupal_fetch_object, je crois que le nom de membre de l'objet "type" pourrait avoir causé un conflit de noms avec un membre du noyau drupal. Par conséquent, cela provoque l'invocation de hook_view. Après avoir renommé mon domaine à quelque chose de différent, cela fonctionne comme un charme. Donc, ne nommez jamais le champ comme "Type". Vous le saviez peut-être aussi mais, en raison de mon intention de rendre le code plus facile à lire, j'ai renommé ces champs pour les rendre plus simples (f1, ... f10). Désolé pour le dérangement. Et merci à tous pour vos efforts.

acclame

0

Ce crochet est destiné à une utilisation dans un module de noeud (donc un module qui se crée un nouveau type de nœud), je suppose que vous êtes en l'utilisant pour les nœuds définis par Drupal ou CKK ou un autre module, si c'est le cas, utilisez hook_nodeapi() à la place avec l'argument view.

http://api.drupal.org/api/function/hook_nodeapi/6

+0

Non. J'utilise hook_view pour mon propre contenu personnalisé créé/défini dans mon module. J'ai posté du code pour une meilleure évaluation. – Andrew