Truy cập các trường hồ sơ người dùng bổ sung


9

Tôi đã thêm một tá trường mới (trong Drupal 7) vào hồ sơ người dùng bằng cách sử dụng:

Cấu hình -> Mọi người -> Cài đặt tài khoản -> Quản lý trường (quản trị viên / cấu hình / người / tài khoản / trường)

Làm thế nào tôi có thể truy cập các giá trị này? Họ dường như không phải là một phần của người dùng $

Đã thử, không thành công:

global $user;
var_dump($user);

Câu trả lời:


13

Tôi nghĩ rằng tôi đã tìm thấy nó. Có một bước bổ sung có vẻ như.

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

Bây giờ tôi có quyền truy cập vào các trường hồ sơ tùy chỉnh của mình thông qua $ user_full


1

Các hội thảo cũng có thể làm điều này khá dễ dàng với các mối quan hệ.


0

Tôi đang đăng lại câu trả lời của mình từ /programming/8124089/get-value-of-custom-user-field-in-drupal-7-template tại đây vì tôi nghĩ đây là một giải pháp thay thế. Ví dụ này cho thấy cách sử dụng một cái gì đó như field_real_name thay vì tên người dùng mặc định.

Nếu bạn đang sử dụng chức năng tiền xử lý, không cần phải kéo vào $userđối tượng toàn cục . Bạn có thể thay đổi trường trong mảng $ biến đó là $variables['name']những gì bạn có trong trường tùy chỉnh mà tôi đã gọi field_real_name. Bạn có quyền truy cập vào $variablesmảng, vì vậy bạn có thể lấy thông tin người dùng bằng thông tin này - nó sẽ tải thông tin liên quan đến uid ( xem template_pre process_username ):

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

Nếu bạn dpm($account)(hoặc kpr($account)nếu bạn không sử dụng phát âm), bạn sẽ thấy rằng bạn có quyền truy cập vào tất cả thông tin người dùng mà không cần sử dụng $userđối tượng toàn cầu .

Sau đó, bạn có thể thay đổi đầu ra của $variables['name']bạn field_real_namenhư sau:

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

Vì một số lý do kỳ lạ, các trường hồ sơ trong Drupal 7 không phải là những gì họ từng là. Tuy nhiên, đối tượng hồ sơ người dùng làm cho các trường hồ sơ bổ sung có thể truy cập dưới dạng các phần tử mảng. Ví dụ:

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

không có sẵn nhưng nó sẽ hoạt động khi viết lại như thế này:

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

Vì vậy, tôi chỉ đơn giản là làm như sau trong mã của tôi:

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

Chỉ là một cách khác để làm cho mọi thứ hoạt động, thay vì gọi $userđối tượng một lần nữa.


0

Bạn có thể tải dữ liệu người dùng (bao gồm các trường tùy chỉnh) với lõi 7 Drupal

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

Thêm chi tiết tại Drupal 7> API> Tải thực thể

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.