【问题标题】:Drupal menu_get_object error (The server closed the connection > without sending any data)Drupal menu_get_object 错误(服务器关闭连接> 没有发送任何数据)
【发布时间】:2012-01-10 13:06:40
【问题描述】:

我在我的模块 hook_nodeapi 函数中使用 menu_get_object()。由于该代码,我收到以下错误:

错误 324 (net::ERR_EMPTY_RESPONSE):服务器关闭了连接 不发送任何数据。

代码如下:

 function mymodule_nodeapi(&$node, $op, $a3, $a4){    
    $nodex = menu_get_object();
    drupal_set_message("Currnet Node(test) : {$nodex->nid}");
 }

我该如何解决这个问题?

【问题讨论】:

    标签: php drupal drupal-6 module


    【解决方案1】:

    我认为这是因为 $node 是通过引用 hook_nodeapi() 函数传入的,而您正尝试使用 menu_get_object() 重新分配它。

    您应该为要加载的第二个节点使用不同的名称,例如

    function mymodule_nodeapi(&$node, $op, $a3, $a4){    
      $other_node = menu_get_object();
      drupal_set_message("Currnet Node(test) : {$other_node->nid}");
    }
    

    或者,如果您要查找 nodeapi 函数所指的节点,只需使用传递给函数的 $node 对象即可。

    更新

    我认为这会做你想做的事:

    function mymodule_nodeapi(&$node, $op, $a3, $a4){ 
      // If this call to nodeapi is for the currently visited node page
      // $a3 contains a boolean indicating whether the view mode is teaser of full.
      if ($op == 'view' && !$a3) {
        drupal_set_message('Current Node : ' . $node->nid);
      }
    }
    

    【讨论】:

    • 谢谢!变量名绝对是个问题,我已经更正了我的代码和上面的 sn-p。但不幸的是,我仍然遇到同样的错误。该函数应该返回当前正在访问的节点。当我尝试使用参数列表中的 $node 时,它​​会打印多个 $node->nid。例如,它们是按视图列出的页面上存在的所有节点。
    • 非常感谢您成功了。我可以麻烦你解释一下吗。我当然不清楚 $a3 和 $a4 在参数列表中的作用。我真的很感激一个简短的解释。不管怎样,谢谢!
    • 猜测:在menu_get_object() 内部调用的函数实际上再次在对象上使用node_load,它调用hook_nodeapi,然后通过你的钩子,然后再次调用menu_get_object。 ..我会说这会导致 Drupal 无法从中恢复的无限循环。 docs for hook_nodeapi() 包含在 $a3$a4 中传递的每个特定 $op 的所有详细信息 :)
    • 不知道你能不能帮我解决类似的问题? - stackoverflow.com/questions/8342169/…
    猜你喜欢
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    相关资源
    最近更新 更多