重定向

时间:2017-08-31 09:45:52

标签: javascript php redirect drupal drupal-7

我想在drupal中重定向到目标后加载js文件。我创建了一个带有hook_user_login的自定义模块。我在成功登录时重定向了一个页面,并希望在redirect.now文件加载到登录成功和重定向之间加载一个js文件。

function one_time_popup_user_login(&$edit, $account){
$userName='test'; 
if(!isset($_COOKIE[$userName])){
$count=1;
  if($count==1)
     {
          drupal_add_js(array('one_time_popup' => array('aniv' => $anniversaryCount,'userName'=>$userName,'celeType'=>'Anniversary')), array('type' => 'setting'));
drupal_add_js(drupal_get_path('module', 'one_time_popup') . '/celebrationPopup.js','file');
       $settings=variable_get('one_time_popup_effects',unserialize(ONE_TIME_POPUP_DEFAULT)); 
       drupal_add_js(array('onetimepopupmenu'=>$settings),'settings'); 
       setcookie($userName, '1', time()+(24 *3600));
     }
if (!isset($_GET['destination'])) {
        $_GET['destination'] = drupal_get_destination(); //get the current url 
     }
}
}

1 个答案:

答案 0 :(得分:0)

我认为您需要在目标网页中安装JS。并告诉该页何时运行它。或者将其添加到以特定页面为目标的钩子中。

首先,我会在您的钩子中包含一些额外的验证,以便在用户尝试恢复密码时不会发生重定向。

了解我如何检查' user_pass_reset'表格ID在以下例子中:

使用其他JS函数启动JS

function one_time_popup_user_login(&$edit, $account) {
      if (!isset($_POST['form_id']) || $_POST['form_id'] != 'user_pass_reset') {
        $_GET['destination'] = 'your/custom/path#celebrationpopup';
  }
}

注意我是如何将哈希(#celebrationpopup)添加到目标网址的。 稍后我们将在目标页面中使用它来运行我们需要的JS函数。

您需要放置在目标页面中的示例jQuery代码。为此,您需要在代码中加载函数one_time_popup()。这只是一个例子。

$(document).ready(function() {
  //Get hash from URL
  var hash = location.hash;

  if (hash == '#celebrationpopup') {
    one_time_popup();
  }
});

另一种选择:使用钩子

如果目标网页是您可以使用的节点:

function one_time_popup_user_login(&$edit, $account) {
  if (!isset($_POST['form_id']) || $_POST['form_id'] != 'user_pass_reset') {
    $_GET['destination'] = 'your/custom/path?celebrationpopup=true';
  }
}


function one_time_popup_node_view($node, $viewmode, $langcode) {
  if($node->type == 'some_type' && isset ($_GET["celebrationpopup"])) // You can also use a node ID.
  {
    drupal_add_js(array('one_time_popup' => array('aniv' => $anniversaryCount,'userName'=>$userName,'celeType'=>'Anniversary')), array('type' => 'setting'));
    $node->content['#attached']['js'][] = array
    (
      'type' => 'file',
      'data' => drupal_get_path('module', 'one_time_popup') . 'js/celebrationPopup.js',
    );
  }
}

您也可以使用页面预处理功能。

希望这很清楚。