hook_view drupal的奇怪问题

时间:2010-09-11 16:12:25

标签: drupal drupal-views

我在使用hook_view时遇到了一个奇怪的问题。问题是,除非hook_load返回无效值,例如空变量,否则不会调用hook_view。我不知道是什么导致这种情况发生的,我的智慧结束了。我非常感谢你的帮助。值得的是,我安装了图像附加模块。

Drupal 6.x

更新

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,
            ),
        ),
    );
}

2 个答案:

答案 0 :(得分:1)

我找到了罪魁祸首。为了防止有人遇到同样的问题,这就是为什么 - 我将一个字段命名为“TYPE”,当我用drupal_fetch_object检索hook_load中的记录集时,我相信,结果对象的成员名称“type”可能会导致一些命名冲突与drupal核心成员。结果,这导致它不调用hook_view。在我将我的领域重新命名为不同的东西之后,它就像魅力一样。因此,永远不要将字段命名为“类型”。你们可能也知道这一点,但由于我打算让代码更易于阅读,我将这些字段重命名为更简单的字段(f1,... f10)。抱歉,添麻烦了。并感谢大家的努力。

欢呼声

答案 1 :(得分:0)

这个钩子用于在节点模块中使用(所以一个模块本身创建一个新的节点类型),我假设您将它用于Drupal或CKK或其他模块定义的节点,如果是这样,请使用hook_nodeapi(而不是视图参数。

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