Как получить контент, принадлежащий текущему вошедшему в систему пользователю?
Пользователь является владельцем только одного узла, и я хочу перенаправить пользователя во время входа в систему на его единственный принадлежащий узел.
Как я могу получить содержимое узла, если я знаю только вошедшего в систему пользователя?
4 answers
Вот как я это сделал:
function MYHOOK_user_login(&$edit, $account) {
global $user;
$nid = db_query('SELECT nid FROM {node} WHERE uid = :uid', array(':uid' => $user->uid))->fetchField();
drupal_goto('node/' . $nid);
}
Взгляните на hook_user_login -> http://api.drupal.org/api/drupal/modules--user--user.api.php/function/hook_user_login/7 . Здесь вы можете добавить свой собственный пользовательский код для выполнения таких действий, как поиск идентификатора узла (nid) по идентификатору пользователя (uid), а затем выдать drupal_goto (http://api.drupal.org/api/drupal/includes--common.inc/function/drupal_goto/7)
Также есть возможность выполнить настройку с помощью hook_form_alter для входа в систему форма, которую можно было бы рассматривать скорее как решение D6. Вам придется предоставить более подробную информацию, если эти предложения не отвечают на ваш вопрос.
$nid = db_query('SELECT nid FROM {node} WHERE uid = :uid AND type = :type', array(':uid' => $user->uid, ':type' => $node_type))->fetchField():
Это даст вам nid.
Примечание: пожалуйста, не обращайте внимания на этот ответ (см. Комментарии, почему).
$nid = db_select('node', 'n')
->fields('n', array('nid'))
->condition('n.uid', $user->uid)
->range(0, 1)
->fetchField()
У меня возникло бы искушение сделать это таким образом, так как это больше похоже на "Друпал", хотя другие предложения, безусловно, верны. Обратите внимание, что я установил ограничение на инструкцию SQL для обеспечения безопасности.