การเข้าถึงฟิลด์โปรไฟล์ผู้ใช้เพิ่มเติม


9

ฉันเพิ่มโหลใหม่หรือมากกว่านั้น (ใน Drupal 7) ลงในโปรไฟล์ผู้ใช้โดยใช้:

การกำหนดค่า -> คน -> การตั้งค่าบัญชี -> จัดการฟิลด์ (ผู้ดูแลระบบ / กำหนดค่า / คน / บัญชี / ฟิลด์)

ฉันจะเข้าถึงค่าเหล่านี้ได้อย่างไร ดูเหมือนว่าพวกเขาจะไม่ได้เป็นส่วนหนึ่งของผู้ใช้ $

พยายามไม่ประสบความสำเร็จ:

global $user;
var_dump($user);

คำตอบ:


13

ฉันคิดว่าฉันพบมัน มีอีกหนึ่งขั้นตอนที่ดูเหมือนว่าเป็น

global $user;
$user_full = user_load($user->uid); // user_load(uid) returns the complete array
var_dump($user_full);

ตอนนี้ฉันสามารถเข้าถึงฟิลด์โปรไฟล์ที่กำหนดเองของฉันผ่านทาง $ user_full



0

ฉันโพสต์คำตอบของฉันใหม่จาก/programming/8124089/get-value-of-custom-user-field-in-drupal-7-templateที่นี่เนื่องจากฉันคิดว่านี่เป็นทางเลือกอื่น ตัวอย่างนี้แสดงวิธีใช้บางอย่างเช่น field_real_name แทนชื่อผู้ใช้เริ่มต้น

หากคุณใช้ฟังก์ชัน preprocess ไม่จำเป็นต้องดึงใน$userวัตถุส่วนกลาง คุณสามารถเปลี่ยนสนามในอาร์เรย์ $ ตัวแปรที่เป็นกับสิ่งที่คุณมีในช่องที่กำหนดเองของคุณที่ผมเคยเรียกว่า$variables['name'] field_real_nameคุณสามารถเข้าถึง$variablesอาร์เรย์ได้ดังนั้นคุณสามารถรับข้อมูลผู้ใช้ได้ด้วย - มันจะโหลดข้อมูลที่เกี่ยวข้องกับ uid ( ดู template_preprocess_username ):

function mythemename_preprocess_username(&$variables) {
    $account = user_load($variables['account']->uid);
    ...more code will go here in a moment
}

หากคุณdpm($account)(หรือkpr($account)หากคุณไม่ได้ใช้ devel) คุณจะเห็นว่าคุณสามารถเข้าถึงข้อมูลผู้ใช้ทั้งหมดโดยไม่ต้องใช้$userออบเจกต์ร่วม

จากนั้นคุณสามารถเปลี่ยนผลลัพธ์ของ$variables['name']การfield_real_nameเป็นดังนี้:

function mythemename_preprocess_username(&$variables) {

  // Load user information with user fields
  $account = user_load($variables['account']->uid);

  // See if user has real_name set, if so use that as the name instead
  $real_name = $account->field_real_name[LANGUAGE_NONE][0]['safe_value'];
  if (isset($real_name)) {
    $variables['name'] = $real_name;
  }
}

0

ด้วยเหตุผลแปลก ๆ ฟิลด์โปรไฟล์ใน Drupal 7 ไม่ใช่สิ่งที่พวกเขาเคยเป็น อย่างไรก็ตามวัตถุโปรไฟล์ผู้ใช้ทำให้ฟิลด์โปรไฟล์เพิ่มเติมสามารถเข้าถึงได้เป็นองค์ประกอบอาร์เรย์ ตัวอย่างเช่น:

$profile->field_fieldname['und'][0]['value']

ใช้ไม่ได้ แต่จะใช้งานได้เมื่อเขียนใหม่เช่นนี้:

$user_profile['field_fieldname']['#object']->field_fieldname['und'][0]['value'];

ดังนั้นฉันเพียงทำต่อไปนี้ในรหัสของฉัน:

/*
 * Create simplified variables as shortcuts for all fields.
 * Use these variables for read access lateron.
 */
$firstname = $user_profile['field_first_name']['#object']
  ->field_first_name['und'][0]['value'];

$middlename = $user_profile['field_middle_name']['#object']
  ->field_middle_name['und'][0]['value'];

$surname = $user_profile['field_surname']['#object']
  ->field_surname['und'][0]['value'];

$image = $user_profile['field_user_picture']['#object']
  ->field_user_picture['und'][0]['uri'];

อีกวิธีหนึ่งในการทำให้สิ่งต่าง ๆ ทำงานได้แทนที่จะเรียกสิ่ง$userนั้นอีกครั้ง


0

คุณสามารถโหลดข้อมูลผู้ใช้ (รวมฟิลด์ที่กำหนดเอง) ด้วย Drupal 7 core

$user = entity_load($entity_type = "user", $ids = Array($user->uid), $conditions = array(), $reset = FALSE);

รายละเอียดเพิ่มเติมที่Drupal 7> API> Entity load

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