Drupal 7을 사용하여 블록에 '환영 {username}'을 추가하는 방법


15

drupal 6 웹 사이트를 drupal 7 웹 사이트로 바꾸고 있습니다. Drupal 6 웹 사이트에는 로그인 할 때 표시되는 블록이 있습니다. 제목으로 해당 블록에 'Welcome {username}'메시지가 표시됩니다.

Drupal 7에서 그렇게 할 수있는 방법을 찾고 있는데 'Token'모듈 로이 작업을 시도했지만 작동하지 않습니다. 가장 좋은 방법은 무엇입니까?


여기에 대한 블로그 게시물은 다음과 같습니다 is.gd/j2q0Uu
AyeshK

답변:


12

블록 또는 블록을 추가하는 사용자 정의 모듈에서 다음 코드를 추가하십시오.

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

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

이것은 당신이 현재 사용자 정보를 원하는 경우 더 유용합니다. 아마도 이것은user_is_logged_in 기능에 대해서도 가능 합니다.


이것은 잘 작동했습니다. 아래의 첫 번째 답변을 읽음으로써 해결책을 찾았습니다. 그러나 Drupal과 함께 제공되는 표준 PHP 콘텐츠 용 모듈에 대해 알지 못했기 때문에 조금 더 검색해야했습니다. 답장을 보내 주셔서 감사합니다.
Guan23

$ user 전역 변수를 사용하여 이미 진행중인 작업을 수행하므로 user_is_logged_in ()을 호출 할 필요가 없습니다. 아래 답변에 따라 $ user-> uid를 확인하십시오.
루비

5

모듈 에서이 작업을 수행하려면 (블록에 PHP 코드를 추가하는 대신 권장되며 버전 제어가 아닌) 권장 작업을 수행 할 수 있습니다.

(이 경우이 모든 코드는 userwelcome이라는 사용자 정의 모듈에 들어갑니다.)

/**
 * @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;
}

테마 에서이 블록의 테마를 재정의하려면 테마의 template.php 파일 에서이 작업을 수행하십시오.

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

이 모듈은 사용자 정의 모듈이므로 모듈의 테마 기능을 직접 업데이트 할 수도 있습니다.

커스텀 모듈을 사용하지 않으려면 PHP 코드로 커스텀 블록을 만들고 이것을 추가하십시오 :

global $user;
// Only for logged in users.
if ($user->uid) {
  print 'Welcome ' . theme('username', array('account' => $user));
}

각 기능의 이름과 위치에 대해 조금 불분명하지만 이것은 훌륭한 답변입니다. 여기 내 가정이 있습니다-내가 맞다면 조언 해 줄 수 있습니까? 테마 이름이로 가정하면 모듈이 아닌 테마theme_userwelcome기능 theme_userwelcome_welcome_block을 배치 해야합니다 . 아마도 함수를 실제로 호출하고 (예 : 테마의 이름이 대체되는 2 개의 테마 단어 ) 테마에 배치해야합니다 . 기능 을 유지 합니다. userwelcomeuserwelcome_themeuserwelcome_theme_themehooktheme_userwelcomeuserwelcome_block_viewuserwelcome_block_infouserwelcome
therobyouknow

이 정보로 답변을 업데이트했습니다.이 모든 코드는 userwelcome이라는 모듈을 사용합니다. 당신은 당신이 THEMENAME_userwelcome_welcome_block ($ 변수)를 사용하는 것이 테마에서 블록의 themeing을 무시하고 싶다면
rooby

5

뷰 모듈을 사용하십시오. 새보기 생성> 사용자 표시> 블록 표시. 상황 별 필터 추가> 기본 인수 제공> 로그인 한 사용자의 사용자 ID 원하는 텍스트 / 토큰 또는 사용자 프로필 필드를 포함하도록 필드를 구성하십시오 (결과를 다시 쓸 수 있음). 저장하고 지역에 블록을 추가하십시오.

하나의 모듈로 코드없이 완료

-lunk_rat


나는이 답변이 더 많은지지를 줄 것이라고 믿는다. 이것은 더 'Drupal 방식'을 느낍니다. 구성으로 해결할 수 있다면 코드를 사용하는 대신 그렇게하십시오.
Ideogram

@Ideogram도 접근 방식이므로 다른 솔루션이 많이 작동하더라도 답변을 제출했습니다. 투표권을 얻는 것 같습니다 ...
링크 스완슨
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.