Ottenere il valore di un campo da un'entità


11

Quello che ho installato sul mio sito è l'API Entity e i moduli Entityform. Il modulo Entityform mi consente di creare moduli che qualsiasi utente può inviare e che i campi dei moduli sono disponibili per l'uso nelle viste, in modo simile a come funzionerebbe un tipo di contenuto.

Normalmente per estrarre il valore di un campo da un nodo nel mio modello con php farei quanto segue:

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

Tuttavia, ciò non funziona con entità / forme entità.

Qualcuno conosce un modo per farlo per un campo all'interno di un'entità? Alcune persone hanno suggerito di usare devel e la funzione dpm () ma non ho idea di come usarli.

Alcuni esempi specifici su come posso ottenere il valore di questo campo mi aiuterebbero molto.

Risposte:


13

Hai provato ad accedere ai valori con 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

4
Nota per i lettori futuri: questo è corretto, ma per accedere a un campo entità non è necessario installare il modulo API Entity; Drupal core ha già le funzioni per accedere a un campo entità.
kiamlaluno

Sì, ma OP ha taggato e specificato che aveva installato il modulo API Entity, quindi entity_metadata_wrapper, inoltre è una dipendenza del modulo entityforms.
David Thomas,

2
entity-api è il tag per l'API Entity implementato da Drupal 7, non per il modulo API Entity. La nota è di evitare che gli sviluppatori principianti ritengano che il modulo API Entity sia necessario per gestire le entità. Non ho detto che la risposta non era corretta. :)
kiamlaluno

7

Senza utilizzare il modulo API Entity, per ottenere il valore di un campo associato a un'entità, si utilizza field_get_items () ; devi solo passare il tipo di entità, l'oggetto entità e il nome del campo.

Ad esempio, per ottenere il corpo di un commento, utilizzare il seguente codice.

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

Per ottenere il corpo di un nodo, è possibile utilizzare il seguente codice.

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

L'oggetto entità è l'oggetto restituito da entity_load () o una funzione di carico specifica per tale entità, come node_load () , comment_load () o taxonomy_term_load () . In Drupal 8, quelle funzioni sono wrapper per entity_load().

Se vuoi mostrare il contenuto del campo, allora dovresti usare field_view_field () .


0

Normalmente puoi ottenere le proprietà $ node perché tu o qualche codice che stai utilizzando stai chiamando node_load () in anticipo.

Devi caricare completamente un'entità prima di poter accedere alle sue proprietà.

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

Quindi avrai effettivamente un oggetto entità caricato che puoi ottenere nei campi di.

L'uso di dpm () è uguale a qualsiasi altra funzione, è sufficiente installare il modulo di sviluppo.

Quindi, fai qualcosa del genere:

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

0

Provare:

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

Questo dovrebbe stampare il valore del campo.

Se è un array, prova questo:

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

Ricorda che questo è l'output non elaborato e, a seconda della provenienza del valore, potrebbe essere necessario disinfettare manualmente il valore qui.

Vedi: funzione field_get_items


0

Inseriscilo in uno dei tuoi moduli e vai alla pagina del modulo e troverai le informazioni che stai cercando.

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

  dpm($form);

}

-1

Anziché utilizzare dpm e installare quel modulo, utilizzo:

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

Spero che questo ti aiuti a scavare fino al valore.


Hmmm, questo non sta producendo nulla per me :( Potrebbe essere perché sto visualizzando un invio di entitàforme e non un nodo? O un invio di entitàforme sarebbe effettivamente un nodo? Così confuso.
Dustin

Non sono sicuro quindi, suppongo che avresti bisogno di una variabile diversa da $ node.
Brian,

1
La domanda riguarda l'accesso a un campo di un'entità, non come stampare l'entità.
kiamlaluno
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.