Accéder par programme au champ utilisateur personnalisé


8

J'ai ajouté un champ Node-reference (nom de la machine: field_node) à tous les utilisateurs à:

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

Je travaille maintenant dans un module personnalisé & hook_node_access

Comment accéder par programmation au champ Node-reference lorsque l'utilisateur est connecté?

Réponses:


10

Vous pouvez obtenir des valeurs de champ à partir de n'importe quelle entité avec field_get_items(); l'utilisateur connecté est disponible dans l' $userobjet global et pour charger des champs sur cet objet, vous pouvez l'utiliser user_load().

Mettez-les ensemble et vous obtenez quelque chose comme ceci:

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

C'est le code abstrait si vous le souhaitez.

Il convient de garder à l'esprit qu'il hook_node_access()est $accountdéjà passé un objet (qui sera l'utilisateur connecté si le contrôle d'accès se produit pour eux), il serait donc préférable de l'utiliser pour vérifier. Vous devrez peut-être encore l'exécuter user_load(), il sera assez facile de le vérifier avec un peu de débogage.


6

Deux options ici, en utilisant l'API de base ou 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]);

Fonctions pertinentes:

Vous pouvez également, si vous utilisez le module API d'entité, utiliser 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 : Désolé, la réponse a été publiée pendant que je publiais cette réponse.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.