【问题标题】:Drupal redirect when access denied访问被拒绝时的 Drupal 重定向
【发布时间】:2014-08-15 10:39:16
【问题描述】:

我们在项目中使用了一个名为“certificate”的模块。 *.module 文件中有一个 Function 包含以下内容:

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”回调来检查用户是否有权下载证书。

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

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

1) 操作回调函数,每次当它返回“False”时,我只需在那里写一个exit; 并在之前使用location() 重定向?

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

3) 我必须以特殊方式操作函数certificate_menu() 吗?

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

【问题讨论】:

    标签: php drupal drupal-7


    【解决方案1】:

    您可以在访问回调中使用“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,否则您的页面回调将不会注册。

    【讨论】:

      猜你喜欢
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多