วิธีเพิ่ม 'ยินดีต้อนรับ {ชื่อผู้ใช้}' ในบล็อกด้วย Drupal 7


15

ฉันกำลังแทนที่เว็บไซต์ drupal 6 โดย drupal 7 หนึ่งด้วยเนื้อหาเดียวกัน บนเว็บไซต์ Drupal 6 มีบล็อกที่ปรากฏขึ้นเมื่อคุณเข้าสู่ระบบส่วนหัวจะแสดงข้อความ 'ยินดีต้อนรับ {ชื่อผู้ใช้}' ในบล็อกนั้น

ฉันกำลังมองหาวิธีที่จะทำเช่นนั้นใน 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ฟังก์ชั่น


มันใช้งานได้ดี ฉันพบวิธีแก้ปัญหาโดยอ่านคำตอบแรกด้านล่างนี้ อย่างไรก็ตามฉันไม่รู้เกี่ยวกับโมดูลสำหรับเนื้อหา php ที่จัดส่งแบบมาตรฐานกับ Drupal ดังนั้นฉันจึงต้องค้นหาต่อไปอีกเล็กน้อย ขอบคุณสำหรับการตอบกลับของคุณ.
Guan23

ไม่จำเป็นต้องโทรหา user_is_logged_in () เพราะทำสิ่งที่คุณกำลังทำอยู่โดยใช้ตัวแปรผู้ใช้ $ user ทั่วโลก เพียงตรวจสอบผู้ใช้ $ -> uid ตามคำตอบของฉันด้านล่าง
rooby

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.
}

โปรดทราบว่าเนื่องจากนี่เป็นโมดูลที่กำหนดเองคุณจึงสามารถอัพเดตธีม funciton ในโมดูลได้โดยตรง

หากคุณไม่ต้องการใช้โมดูลที่กำหนดเองคุณสามารถสร้างบล็อกที่กำหนดเองด้วยรหัส php และเพิ่มสิ่งนี้:

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

นี่เป็นคำตอบที่ดีแม้ว่าฉันจะไม่ค่อยชัดเจนเกี่ยวกับการตั้งชื่อและตำแหน่งของฟังก์ชั่นแต่ละอย่าง นี่คือสมมติฐานของฉัน - คุณช่วยแนะนำได้ไหมถ้าฉันถูกต้อง? สมมติว่าชื่อชุดรูปแบบคือtheme_userwelcomeควรtheme_userwelcome_welcome_blockวางฟังก์ชันในชุดรูปแบบไม่ใช่userwelcomeโมดูล สมมุติuserwelcome_themeฟังก์ชั่นที่จริงควรจะเรียกว่าuserwelcome_theme_theme(ใช่คำ 2 ธีมเป็นชื่อของแทนที่รูปแบบhook) theme_userwelcomeและวางไว้ในรูปแบบที่ ฟังก์ชั่นuserwelcome_block_viewและยังคงอยู่ในuserwelcome_block_info userwelcome
therobyouknow

ฉันได้อัปเดตคำตอบด้วยข้อมูลนี้: รหัสทั้งหมดนี้เป็นโมดูลที่ชื่อยินดีต้อนรับผู้ใช้ หากคุณต้องการแทนที่ธีมของบล็อกจากธีมคุณจะใช้ THEMENAME_userwelcome_welcome_block (& ​​$ ตัวแปร)
rooby

5

ใช้โมดูลมุมมอง สร้างมุมมองใหม่> แสดงผู้ใช้> บล็อกการแสดงผล เพิ่มตัวกรองตามบริบท> ระบุอาร์กิวเมนต์เริ่มต้น> ID ผู้ใช้จากผู้ใช้ที่เข้าสู่ระบบ กำหนดค่าฟิลด์ (คุณสามารถเขียนผลลัพธ์ใหม่) เพื่อรวมข้อความ / โทเค็นหรือฟิลด์โปรไฟล์ผู้ใช้ที่คุณต้องการ บันทึกและเพิ่มบล็อกในภูมิภาค

ทำด้วยโมดูลเดียวและไม่มีรหัส

-lunk_rat


ฉันเชื่ออย่างยิ่งว่าคำตอบนี้สมควรได้รับผู้โหวตมากขึ้น สิ่งนี้ให้ความรู้สึก 'ทาง Drupal' มากกว่า หากคุณสามารถแก้ไขได้ด้วยการกำหนดค่าให้ทำเช่นนั้นแทนที่จะใช้รหัส
Ideogram

@Ideogram นั้นเป็นแนวทางของฉันด้วยเช่นกันซึ่งเป็นสาเหตุที่ฉันส่งคำตอบถึงแม้ว่าวิธีแก้ปัญหาอื่น ๆ จะใช้ได้ ดูเหมือนว่าจะได้รับคะแนนโหวต ...
เชื่อมโยง Swanson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.