it-swarm.com.de

Programmgesteuert auf benutzerdefiniertes Benutzerfeld zugreifen

Ich habe allen Benutzern ein Knotenreferenzfeld (Computername: field_node) hinzugefügt unter:

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

Ich arbeite jetzt in einem benutzerdefinierten Modul & hook_node_access

Wie greife ich programmgesteuert auf das Knotenreferenzfeld zu, wenn der Benutzer angemeldet ist?

8
user1706487

Sie können Feldwerte von jeder Entität mit field_get_items() abrufen. Der angemeldete Benutzer ist im globalen Objekt $user verfügbar. Zum Laden von Feldern in dieses Objekt können Sie user_load() verwenden.

Füge diese zusammen und du bekommst so etwas:

// 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];
}

Das ist der abstrakte Code, wenn Sie möchten.

Es ist zu beachten, dass hook_node_access() bereits ein $account - Objekt übergeben wird (das der angemeldete Benutzer ist, wenn die Zugriffsprüfung für ihn stattfindet), sodass Sie dies wahrscheinlich besser verwenden sollten zu überprüfen. Möglicherweise müssen Sie es noch über user_load() ausführen. Es ist einfach genug, dies mit ein wenig Debugging zu überprüfen.

10
Clive

Zwei Optionen hier, unter Verwendung der Kern-API oder 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]);

Relevante Funktionen:

Wenn Sie das Entity-API-Modul verwenden, können Sie auch entity_metadata_wrapper verwenden

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 [~ # ~] : Entschuldigung, die Antwort wurde gepostet, während ich diese Antwort gepostet habe.

6
David Thomas