Accesso programmatico al campo utente personalizzato


8

Ho aggiunto un campo di riferimento nodo (nome macchina: field_node) a tutti gli utenti su:

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

Ora sto lavorando in un modulo personalizzato e hook_node_access

Come posso accedere al campo di riferimento nodo in modo programmatico quando l'utente ha effettuato l'accesso?

Risposte:


10

È possibile ottenere valori di campo da qualsiasi entità con field_get_items(); l'utente che ha effettuato l'accesso è disponibile $usernell'oggetto globale e per caricare i campi su quell'oggetto è possibile utilizzare user_load().

Metti insieme quelli e ottieni qualcosa del genere:

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

Questo è il codice astratto se vuoi.

Vale la pena ricordare che hook_node_access()è $accountgià passato un oggetto (che sarà l'utente che ha effettuato l'accesso se sta verificando il controllo dell'accesso per loro), quindi probabilmente sarebbe meglio usarlo per verificare. Potrebbe essere ancora necessario eseguirlo user_load(), sarà abbastanza facile verificarlo con un po 'di debug.


6

Due opzioni qui, utilizzando l'API principale o 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]);

Funzioni rilevanti:

Inoltre, se si utilizza il modulo API Entity, è possibile utilizzare 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 : Mi dispiace, la risposta è stata pubblicata mentre stavo postando questa risposta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.