访问被拒绝时Drupal重定向

时间:2014-08-15 10:39:16

标签: php drupal drupal-7

我们在我们的projekt中使用了一个名为" certificate"的模块。 * .module文件中有一个函数包含:

function certificate_menu() {
    $items['node/%node/certificate'] = array(
    'title' => 'Certificate',
    'description' => 'Display earned certificate for this node',
    'page callback' => 'certificate_node_certificate',
    'page arguments' => array(1),
    'access callback' => 'certificate_can_access_certificate',
    'access arguments' => array(1),
    'file' => 'certificate.pages.inc',
    'type' => MENU_LOCAL_TASK,
  );
}

有一个" certificate_can_access_certificate"回调以检查用户是否有权下载证书。

我现在尝试的是重定向页面" /my/another/access/denied/page/for/certificate"当此回调返回false时。

现在推荐的解决方法是什么?

1)操纵回调函数,每次返回" False"我只是在那里写了一个exit;,然后用location()重定向?

2)有没有办法在我自己的自定义模块中创建一个函数来实现这种重定向?

3)我是否必须以特殊方式操纵函数certificate_menu()

我对Drupal了解不多,所以我不知道最好的方法是什么,以及如何做到这一点......

1 个答案:

答案 0 :(得分:0)

您可以在访问回调中使用“drupal_goto”功能进行重定向。

这是一个例子,如果你添加?doredirect = true,它将从访问函数重定向。

function certificate_menu() {
    $items['mytestpage'] = array(
    'title' => 'Certificate',
    'description' => 'Display earned certificate for this node',
    'page callback' => 'certificate_testpage',
    'access callback' => 'certificate_access',
  );

  return $items;
}

function certificate_testpage() {
  return 'testing!';
}

function certificate_access() {

  if(isset($_GET['doredirect'])) {
    drupal_goto('', array(), 301);
  }
  return 1;
}

另外,请注意,您需要在hook_menu中返回$ items,否则您的页面回调将不会注册。