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

11

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.

Dustin
la source

Réponses:

13

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
David Thomas
la source
4
Remarque pour les futurs lecteurs: c'est correct, mais pour accéder à un champ d'entité, il n'est pas nécessaire d'installer le module API d'entité; Drupal core a déjà les fonctions pour accéder à un champ d'entité.
kiamlaluno
Oui, mais OP a marqué et spécifié qu'ils avaient le module Entity API installé, donc entity_metadata_wrapper, de plus c'est une dépendance du module entityforms.
David Thomas
2
entity-api est la balise pour l'API d'entité implémentée à partir de Drupal 7, pas pour le module d'API d'entité. La note est d'éviter que les développeurs débutants pensent que le module API d'entité est nécessaire pour gérer les entités. Je n'ai pas dit que la réponse n'était pas correcte. :)
kiamlaluno
7

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 () .

kiamlaluno
la source
0

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);
?>
David Meister
la source
0

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

gkom
la source
0

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);

}
user39561
la source
-1

Plutôt que d'utiliser dpm et d'installer ce module, j'utilise:

print_r('<pre>');
print_r($node);
print_r('</pre>');

J'espère que cela vous aidera à creuser jusqu'à la valeur.

Brian
la source
Hmmm, cela ne génère rien pour moi :( Serait-ce parce que je consulte une soumission d'entité, et non un nœud? Ou une soumission d'entité serait-elle en fait un nœud? Tellement confus.
Dustin
Je ne suis pas sûr alors, je suppose que vous auriez besoin d'une variable différente autre que $ node.
Brian
1
La question concerne l'accès à un champ d'une entité, pas comment imprimer l'entité.
kiamlaluno