Wie man mit Drupal 7 'Willkommen {Benutzername}' in Blöcken hinzufügt

15

Ich ersetze eine Drupal 6-Website durch eine Drupal 7-Website mit dem gleichen Inhalt. Auf dieser Drupal 6-Website ist ein Block sichtbar, wenn Sie angemeldet sind. Als Überschrift wird in diesem Block die Meldung "Willkommen {Benutzername}" angezeigt.

Ich suche nach einer Möglichkeit, dies in Drupal 7 zu tun. Ich habe versucht, dies mit dem Modul 'Token' zu tun, aber ich arbeite nicht. Wie geht das am besten?

Guan23
quelle
Hier ist ein Blog-Beitrag dazu: is.gd/j2q0Uu
AyeshK

Antworten:

12

Fügen Sie entweder in einem Block oder in einem benutzerdefinierten Modul, das einen Block hinzufügt, den folgenden Code hinzu:

if (user_is_logged_in() == TRUE) {
    global $user;

    print "Welcome " . $user->name;
}
else {
    print "Please log in.";
}

Dies ist nützlicher, wenn Sie CURRENT-Benutzerinformationen wünschen. Möglicherweise dies auch für die user_is_logged_inFunktion.

Chapabu
quelle
Das hat gut funktioniert. Ich habe die Lösung gefunden, indem ich die erste Antwort darunter gelesen habe. Allerdings wusste ich nichts über das Modul für PHP-Inhalte, das standardmäßig mit Drupal ausgeliefert wird, so dass ich etwas weiter suchen musste. Danke für deine Antwort.
Guan23,
Der Aufruf von user_is_logged_in () ist nicht erforderlich, da dies genau das ist, was Sie bereits mit der globalen Variablen $ user tun. Überprüfe einfach $ user-> uid wie in meiner Antwort unten angegeben.
Rooby
5

Wenn Sie dies in einem Modul tun möchten (im Gegensatz zum Hinzufügen von PHP-Code zu einem Block, der sich dann nicht in der Versionskontrolle befindet), können Sie dies tun:

(In diesem Fall würde der gesamte Code in einem benutzerdefinierten Modul namens userwelcome gespeichert.)

/**
 * @file
 * Adds a block that welcomes users when they log in.
 */

/**
 * Implements hook_theme().
 */
function userwelcome_theme($existing, $type, $theme, $path) {
  return array(
    'userwelcome_welcome_block' => array(
      'variables' => array('user' => NULL),
    ),
  );
}

/**
 * Implements hook_block_info().
 */
function userwelcome_block_info() {
  // This example comes from node.module.
  $blocks['welcome'] = array(
    'info' => t('User welcome'),
    'cache' => DRUPAL_CACHE_PER_USER,
  );

  return $blocks;
}

/**
 * Implements hook_block_view().
 */
function userwelcome_block_view($delta = '') {
  global $user;
  $block = array();

  switch ($delta) {
    case 'welcome':
      // Don't show for anonymous users.
      if ($user->uid) {
        $block['subject'] = '';
        $block['content'] = array(
          '#theme' => 'userwelcome_welcome_block',
          '#user' => $user,
        );
      }
      break;
  }
  return $block;
}

/**
 * Theme the user welcome block for a given user.
 */
function theme_userwelcome_welcome_block($variables) {
  $user = $variables['user'];
  $output = t('Welcome !username', array('!username' => theme('username', array('account' => $user))));
  return $output;
}

Wenn Sie dann das Themeing dieses Blocks in einem Theme überschreiben möchten, würden Sie dies tun (in Ihrer template.php-Datei Ihres Theme):

/**
 * Theme the userwelcome block.
 */
function THEMENAME_userwelcome_welcome_block(&$variables) {
  // Return the output of the block here.
}

Beachten Sie, dass Sie, da dies ein benutzerdefiniertes Modul ist, die Themenfunktion auch direkt im Modul aktualisieren können.

Wenn Sie kein benutzerdefiniertes Modul verwenden möchten, können Sie einen benutzerdefinierten Block mit PHP-Code erstellen und Folgendes hinzufügen:

global $user;
// Only for logged in users.
if ($user->uid) {
  print 'Welcome ' . theme('username', array('account' => $user));
}
Dummkopf
quelle
Dies ist eine großartige Antwort, obwohl mir die Benennung und Position der einzelnen Funktionen etwas unklar ist. Hier sind meine Annahmen - können Sie mir raten, ob ich richtig bin? Vorausgesetzt, der Themenname lautet theme_userwelcome, sollte die Funktion theme_userwelcome_welcome_blockim Thema und nicht im userwelcomeModul platziert werden. Vermutlich sollte die userwelcome_themeFunktion tatsächlich aufgerufen userwelcome_theme_theme(ja, 2 Themenwörter als Name des Themas ersetzen hook) und im Thema platziert werden theme_userwelcome. Funktionen userwelcome_block_viewund userwelcome_block_infobleiben in userwelcome.
Therobyouknow
Ich habe die Antwort mit dieser Information aktualisiert: All dieser Code geht in ein Modul mit dem Namen userwelcome. Wenn Sie das Design des Blocks von einem Design überschreiben möchten, verwenden Sie THEMENAME_userwelcome_welcome_block (& ​​$ variables)
rooby
5

Verwenden Sie das Ansichtsmodul. Neue Ansicht erstellen> Benutzer anzeigen> Blockanzeige. Kontextfilter hinzufügen> Standardargument angeben> Benutzer-ID des angemeldeten Benutzers. Konfigurieren Sie die Felder (Sie können die Ergebnisse umschreiben) so, dass sie die gewünschten Text- / Token- oder Benutzerprofilfelder enthalten. Speichern und Block zur Region hinzufügen.

Fertig mit einem Modul und ohne Code.

-lunk_rat

Link Swanson
quelle
Ich bin der festen Überzeugung, dass diese Antwort mehr Gegenstimmen verdient. Das fühlt sich eher "Drupal" an. Wenn Sie es mit der Konfiguration lösen können, dann tun Sie dies auf diese Weise - anstatt Code zu verwenden.
Ideogramm
@Ideogram ist auch mein Ansatz, weshalb ich die Antwort eingereicht habe, obwohl viele der anderen Lösungen funktionieren. Sieht so aus, als würde es einige Stimmen bekommen ...
Link Swanson