Truy cập lập trình trường người dùng tùy chỉnh


8

Tôi đã thêm trường tham chiếu Node (tên máy: field_node) cho tất cả người dùng tại:

example.com/admin/config/people/accounts/fields/

Tôi hiện đang làm việc trong một mô-đun tùy chỉnh & hook_node_access

Làm cách nào để tôi truy cập vào trường tham chiếu Node theo chương trình khi người dùng đăng nhập?

Câu trả lời:


10

Bạn có thể nhận các giá trị trường từ bất kỳ thực thể nào với field_get_items(); người dùng đã đăng nhập có sẵn trong $userđối tượng toàn cầu và để tải các trường vào đối tượng mà bạn có thể sử dụng user_load().

Đặt những thứ đó lại với nhau và bạn sẽ có được thứ gì đó như thế này:

// Get a fully loaded entity object for the logged in user.
$account = user_load($GLOBALS['user']->uid);

// Extract the field items
$field_items = field_get_items('user', $account, 'field_node');
if ($field_items) {
  // This will be 'target_id' if you're using the Entity Reference module, 
  // or 'nid' if you're using References
  $column_name = '?'; 

  $nid = $field_items[0][$column_name];
}

Đó là mã trừu tượng nếu bạn thích.

Cần lưu ý rằng hook_node_access()đã thông qua một $accountđối tượng (sẽ là người dùng đã đăng nhập nếu kiểm tra truy cập đang xảy ra với họ), vì vậy bạn có thể nên sử dụng điều đó để kiểm tra. Bạn vẫn có thể cần phải chạy nó qua user_load(), nó sẽ đủ dễ dàng để kiểm tra xem với một chút gỡ lỗi.


6

Hai tùy chọn ở đây, sử dụng API lõi hoặc entity_metadata_wrapper

global $user;
// Load full user account object
$account = user_load($user->uid);
// Get field;
$items = field_get_items('user', $account, 'field_node');
// Debug info
drupal_set_message('<pre>'.var_export($items,1).'</pre>');
// This gets the sanitized output, from the first field delta value (0)
$output = field_view_value('user', $account, 'field_node', $items[0]);

Các chức năng liên quan:

Bạn cũng có thể, nếu sử dụng mô-đun Entity API, hãy sử dụng entity_metadata_wrapper

global $user;
$user_wrapper = entity_metadata_wrapper('user', $user);
drupal_set_message('<pre>'.var_export($user_wrapper->field_node->raw(),1).'</pre>'); // Raw value
drupal_set_message('<pre>'.var_export($user_wrapper->field_node->value(),1).'</pre>'); // Loaded value

EDIT : Xin lỗi, câu trả lời đã được đăng trong khi tôi đăng câu trả lời này.

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.