Mengakses Kolom Profil Pengguna Tambahan


9

Saya menambahkan sekitar selusin bidang baru (dalam Drupal 7) ke profil pengguna menggunakan:

Konfigurasi -> Orang -> Pengaturan Akun -> Kelola Bidang (admin / konfigurasi / orang / akun / bidang)

Bagaimana saya bisa mengakses nilai-nilai ini? Mereka tampaknya tidak menjadi bagian dari $ user

Sudah dicoba, tanpa hasil:

global $user;
var_dump($user);

Jawaban:


13

Saya rasa saya menemukannya. Sepertinya ada satu langkah tambahan.

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

Saya sekarang memiliki akses ke bidang profil khusus saya melalui $ user_full


1

Panel juga bisa melakukan ini tanpa rasa sakit dengan hubungan.


0

Saya memposting ulang jawaban saya dari /programming/8124089/get-value-of-custom-user-field-in-drupal-7-template di sini karena saya pikir ini adalah solusi alternatif. Contoh ini menunjukkan cara menggunakan sesuatu seperti field_real_name alih-alih nama pengguna default.

Jika Anda menggunakan fungsi preproses, tidak perlu menarik $userobjek global . Anda dapat mengubah bidang dalam array $ variable yang sesuai $variables['name']dengan yang Anda miliki di bidang khusus yang saya panggil field_real_name. Anda memiliki akses ke $variablesarray, sehingga Anda bisa mendapatkan informasi pengguna dengan ini - itu akan memuat informasi yang terkait dengan uid ( lihat template_preprocess_username ):

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

Jika Anda dpm($account)(atau kpr($account)jika Anda tidak menggunakan devel) Anda akan melihat bahwa Anda memiliki akses ke semua informasi pengguna, tanpa menggunakan $userobjek global .

Maka Anda dapat mengubah output $variables['name']menjadi Anda field_real_namesebagai berikut:

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

Untuk beberapa alasan aneh, bidang profil di Drupal 7 tidak seperti dulu. Namun, objek profil pengguna membuat bidang profil tambahan dapat diakses sebagai elemen array. Sebagai contoh:

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

tidak tersedia tetapi akan berfungsi saat ditulis ulang seperti ini:

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

Jadi saya hanya melakukan hal berikut dalam kode saya:

/*
 * 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'];

Hanya cara lain untuk membuat sesuatu berfungsi, alih-alih memanggil $userobjek lagi.


0

Anda dapat memuat data pengguna (termasuk bidang khusus) dengan Drupal 7 core

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

Lebih detail di Drupal 7> API> Memuat entitas

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.