Как перенаправить пользователей на страницу входа при попытке получить доступ к неопубликованной странице содержимого в Drupal 7 - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь предоставить пользователям доступ к некоторым ссылкам на черновой контент (неопубликованное содержимое), чтобы они могли войти в систему и перенаправиться по этим ссылкам. После того, как они нажмут на ссылку, они будут перенаправлены на страницу входа в систему, а после входа в систему со своими учетными данными они будут перенаправлены на нужную страницу. Что происходит, когда они нажимают на любые ссылки, они перенаправляются на домашнюю страницу. Я попытался добавить правило в / admin / config / workflow / rules, но мне не удалось выяснить условия и действия соответствующего события, которое нужно добавить, чтобы мои пользователи перенаправлялись на страницу входа, а затем прямо нажелаемая страница (опубликованная или неопубликованная не имеет значения). Я использую Drupal 7.67 и в основном интерфейс пользовательского интерфейса на компьютере с Windows 10.

1 Ответ

1 голос
/ 08 октября 2019

Самый простой способ, о котором я могу думать, это создать такую ​​функцию.

function modulename_redirect_when_unpublished(){
  //Check if user is in rigth place (viewing nodes).
  if(arg(0) == 'node' && arg(1)){
    //Load this node.
    $node = node_load(arg(1));
    //Check if node status is different than published, and if user is not logged.
    if($node->status != 1 && !user_is_logged_in()){
      //Prepare destination to come back.
      $destination = arg(0) . '/' . arg(1);
      //Go to login page with destination saved.
      drupal_goto('user/login', array('query' => array('destination' => $destination )));
    }
  }
}

Вы можете передать любой путь в параметре "destination" в GET, и после входа он перенаправит вас туда.

Единственный вопрос - куда поставить эту функцию. В целях тестирования я назвал его в одном из моих пользовательских модулей hook_init, но вы можете поместить его в другое место, просто убедитесь, что он будет вызываться на 'node/%' страницах - вы упомянули что-то об использовании правил, это можно сделать таким образомно я думаю, что слишком сложно создать собственное правило только для одного случая, чтобы запустить эту конкретную функцию, поэтому я предлагаю вам поместить этот код в hook_init, как я сделал.

Я тестировал его на Drupal 7.57.

...