Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Drupal挂钩\u菜单\u更改当前节点问题_Php_Drupal_Drupal 6_Module_Nodes - Fatal编程技术网

Php Drupal挂钩\u菜单\u更改当前节点问题

Php Drupal挂钩\u菜单\u更改当前节点问题,php,drupal,drupal-6,module,nodes,Php,Drupal,Drupal 6,Module,Nodes,我正在开发一个新模块,在我的hook_menu_alter()中,我需要检测当前正在查看的节点 我发现我可以使用 菜单获取对象() 以下代码在我的hook\u init()中工作,但在hook\u菜单\u alter()中不工作: 有人能提供一些关于为什么这不起作用以及如何在hook_menu_alter()中获取当前节点信息的见解吗 谢谢。缓存了hook\u menu、hook\u menu\u alter等的输出,因此只有在清除缓存时才会调用这些函数,而不是每次加载页面时。如果你想一想,如果

我正在开发一个新模块,在我的hook_menu_alter()中,我需要检测当前正在查看的节点

我发现我可以使用 菜单获取对象()

以下代码在我的hook\u init()中工作,但在hook\u菜单\u alter()中不工作:

有人能提供一些关于为什么这不起作用以及如何在hook_menu_alter()中获取当前节点信息的见解吗


谢谢。

缓存了
hook\u menu
hook\u menu\u alter
等的输出,因此只有在清除缓存时才会调用这些函数,而不是每次加载页面时。如果你想一想,如果在每一个页面上重新构建菜单,那么网站的性能就会受到很大的影响

因此,当调用
hook\u menu\u alter
时(不会从节点页面调用),就不会有
menu\u get\u object()
节点提供给您。处理这些事情的方法是在菜单项的页面/访问回调中:

function mymodule_menu_alter(&$items) {
  $items['some/path']['page callback'] = 'mymodule_page_callback';
}

function mymodule_page_callback() {
  // This is a live page so menu_get_object() is now available
  $node = menu_get_object();
}
根据您的评论,我认为您试图基于某些标准拒绝对特定节点的访问。为此,您需要为已经存在的
节点/%
菜单路径实现自己的访问回调。大概是这样的:

function mymodule_menu_alter(&$items) {
  $items['node/%node']['access callback'] = 'mymodule_access_callback';
}

function mymodule_access_callback($node) {
  if ($node->type == 'group') {
    if (some_function_that_determines_access($node)) {
      return TRUE;
    }

    return FALSE;
  }

  return node_access('view', $node);
}

这个解决方案适用于Drupal 6吗?是的,Drupal 6和Drupal 7之间针对这个特定问题的代码实际上完全相同。如果我很胖,请告诉我,但我实现了这两个函数,但没有效果。访问时,我发现没有匹配的hook\u page\u alter函数。我只是在看不完整的文档并在代码中出错了吗???非常抱歉,应该是
hook\u menu\u alter()
我把自己弄糊涂了:)我已经在回答中解决了。谢谢你的耐心和帮助,但我已经将$items['some/path']['page callback']设置为false。我开发这个模块是为了帮助有机团体解决一个问题。我发现一个组的成员可以发布到该组以及他们不属于的组中。这一切都是为了限制会员的发帖。因此,现在我可以通过$items[“node/add/page]['access callback']=FALSE禁用“create post”链接。下一步是检测当前节点类型,如果它恰好是一个组,则使用OG函数检查当前用户是否为成员。第一个参数是GroupID
function mymodule_menu_alter(&$items) {
  $items['node/%node']['access callback'] = 'mymodule_access_callback';
}

function mymodule_access_callback($node) {
  if ($node->type == 'group') {
    if (some_function_that_determines_access($node)) {
      return TRUE;
    }

    return FALSE;
  }

  return node_access('view', $node);
}