1

在我解释一些背景知识的同时,请耐心等待这个 Drupal API 新手!

当我的用户单击自定义节点创建链接时,我一直在尝试使用下面的代码创建 2 个单独的响应。默认情况下,会打开一个页面,允许用户完成创建节点的常规步骤。我的模块所做的是检查用户是否具有特定权限,并允许他们继续创建节点或抛出拒绝访问页面。

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

function mymodule_access_callback(){
  if( user_access('open sesame') ){
    drupal_set_message("successfully intecepting new node creation");
    return true;
  }
  return false;
}

节点/添加/页面被成功阻止,但在这两种情况下都是如此。if 语句确定用户是否具有特定权限,并在其中添加了 return true 导致以下错误:

致命错误:require_once() [function.require]:在 /var/www/vhosts/mysite.co.uk/httpdocs/includes/menu 中打开所需的 '/node.pages.inc' (include_path='.:') 失败.inc 在第 347 行

作为一个新手,我不确定我需要做什么才能避免正确用户的访问被拒绝页面。

4

1 回答 1

0

尝试这个:

function mymodule_menu_alter(&$items) {  
  $items["node/add/page/%"]['access callback'] = 'mymodule_access_callback';
  $items["node/add/page/%"]['file'] = drupal_get_path('module', 'node') . '/node.pages.inc';
}

编辑

尝试将上面的第二行更改为:

$items["node/add/page"]['file'] = drupal_get_path('module', 'node') . '/node.pages.inc';

这是为您定义的路径的父项显式设置文件路径的尝试。

此外,这可能是一件愚蠢的事情,但每次您进行更改以hook_menu_alter()确保您清除 Drupal 的缓存以便获取更改时。

于 2011-12-02T16:06:23.060 回答