web-dev-qa-db-fra.com

Obtenir la valeur d'un champ d'une entité

Ce que j'ai installé sur mon site, ce sont les modules Entity API et Entityform. Le module Entityform me permet de créer des formulaires que tout utilisateur peut soumettre et les champs de formulaires sont disponibles pour moi à utiliser dans les vues, de la même manière que le type de contenu fonctionnerait.

Normalement, pour extraire la valeur d'un champ d'un nœud dans mon modèle avec php, je ferais ce qui suit:

<?php echo $node->field_name[$node->language][0]['value']; ?>

Cependant, cela ne fonctionne pas avec les formulaires/entités.

Quelqu'un connaît-il un moyen de le faire pour un champ dans une entité? Certaines personnes ont suggéré d'utiliser devel et la fonction dpm () mais je ne sais pas non plus comment les utiliser.

Quelques exemples spécifiques sur la façon dont je peux obtenir la valeur de ce champ m'aideraient beaucoup.

11
Dustin

Avez-vous essayé d'accéder aux valeurs avec entity_metadata_wrapper ?

$entityform_id = 12; // entity form id
$entityform = entityform_load($entityform_id);
$entityform_wrapper = entity_metadata_wrapper('entityform', $entityform);
// Access fields with $entityform_wrapper->field_name->value() or ->field_name->raw()
drupal_set_message($entityform_wrapper->field_my_field->value()); // for example
13
David Thomas

Sans utiliser le module API d'entité, pour obtenir la valeur d'un champ associé à une entité, vous utilisez field_get_items () ; vous passez simplement le type d'entité, l'objet d'entité et le nom du champ.

Par exemple, pour obtenir le corps d'un commentaire, vous utilisez le code suivant.

if ($items = field_get_items('comment', $comment, 'comment_body')) {
  // ...
}

Pour obtenir le corps d'un nœud, vous pouvez utiliser le code suivant.

if ($items = field_get_items('node', $node, 'body')) {
  // ...
}

L'objet entité est l'objet renvoyé par entity_load () , ou une fonction de chargement spécifique pour cette entité, telle que node_load () , comment_load () =, ou taxonomy_term_load () . Dans Drupal 8, ces fonctions sont des wrappers pour entity_load().

Si vous souhaitez afficher le contenu du champ, vous devez utiliser field_view_field () .

7
kiamlaluno

Normalement, vous pouvez accéder aux propriétés de $ node car vous ou le code que vous utilisez appelle préalablement node_load ().

Vous devez charger complètement une entité avant de pouvoir accéder à ses propriétés.

Utilisez entity_load () http://api.drupal.org/api/drupal/includes%21common.inc/function/entity_load/7

Ensuite, vous aurez en fait un objet entité chargé que vous pouvez obtenir dans les champs de.

L'utilisation de dpm () est identique à toute autre fonction, il vous suffit d'installer le module devel.

Alors, faites quelque chose comme ça:

<?php
$entity = entity_load('myEntityType', $entity_id);
dpm($entity);
?>
0
David Meister

Placez-le dans l'un de vos modules et allez sur la page du formulaire et vous trouverez les informations que vous recherchez.

function yourmodulename_form_alter(&$form, &$form_state, $form_id) {

  dpm($form);

}
0
user39561

Essayer:

$value= field_get_items('entityform', $entityform, 'field_myfieldname');
print '<p>the value is: '.$value.'</p>';

Cela devrait imprimer la valeur du champ.

Si c'est un tableau, essayez ceci:

$values = field_get_items('entityform', $entityform, 'field_myfieldname');
$value = $values[0]['value'];
print '<p>the value is: '.$value.'</p>';

N'oubliez pas qu'il s'agit de la sortie brute et, selon la provenance de la valeur, vous devrez peut-être nettoyer la valeur manuellement ici.

Voir: fonction field_get_items

0
gkom