1

我的自定义 drupal 7 模块遇到了一些问题。请注意,这不是我的第一个模块。这是我的钩子菜单;

function blog_contact_menu(){
    $items = array();
    $items["blog_contact/send_to_one"] = array(
    "page_callback"=>"single_blogger_contact",
    "access_arguments"=>array("access blog_contact content"),
    "type"=>MENU_CALLBACK
    );
    return $items;
}

这是我的烫发功能;

function blog_contact_perm() {
    return array("access blog_contact content");
}

这应该可以,但是当我进行 ajax 调用时,它会给出 403 禁止。您无权查看 bla bla。我的ajax调用正确简单,url正确,类型为post。我没有直接看到原因。

4

2 回答 2

4

菜单路由器项中的属性中包含空格而不是下划线。access_arguments实际上应该是access argumentspage_arguments应该是page arguments,等等:

function blog_contact_menu(){
  $items = array();
  $items["blog_contact/send_to_one"] = array(
    "title" => "Title",
    "page callback"=>"single_blogger_contact",
    "access arguments"=>array("access blog_contact content"),
    "type"=>MENU_CALLBACK
  );
  return $items;
}

另请注意,这title是必需的属性。

除此之外,hook_permission()已经提到您的代码的问题是正确的。

于 2012-08-16T14:37:27.620 回答
0

由于您没有access_callbackhook_menu实现中指定 an ,因此默认情况下它使用该user_access函数并检查您是否已access blog_contact content授予权限。

function blog_contact_menu(){
    $items = array();
    $items["blog_contact/send_to_one"] = array(
    // As mentioned in Clive's answer, you should provide a title 
    "title" => "Your Title goes here",
    "page callback"=>"single_blogger_contact",
    // No "access callback" so uses user_access function by default
    "access arguments"=>array("access blog_contact content"),
    "type"=>MENU_CALLBACK
    );

access blog_contact content不是 Drupal 知道的权限,因此该user_access函数返回 false,这就是您获得 403 访问被拒绝的原因。

如果你想告诉 Drupalaccess blog_contact content权限,那么钩子是hook_permission,而不是hook_perm

你的代码应该更像:

function blog_contact_permission() {
  return array(
    'access blog_contact content' => array(
      'title' => t('Access blog_contact content'), 
      'description' => t('Enter your description here.'),
    ),
  );
}
于 2012-08-16T14:19:21.957 回答