Abrufen des Feldwerts von einer Entität

11

Was ich auf meiner Site installiert habe, sind die Entity API- und Entityform-Module. Mit dem Entityform-Modul kann ich Formulare erstellen, die jeder Benutzer senden kann, und die Formularfelder können in Ansichten verwendet werden, ähnlich wie ein Inhaltstyp funktionieren würde.

Normalerweise würde ich Folgendes tun, um den Wert eines Feldes mit PHP von einem Knoten in meine Vorlage zu ziehen:

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

Dies funktioniert jedoch nicht mit Entityforms / Entities.

Kennt jemand eine Möglichkeit, dies für ein Feld innerhalb einer Entitätsform zu tun? Einige Leute haben vorgeschlagen, devel und die Funktion dpm () zu verwenden, aber ich habe auch keine Ahnung, wie man diese verwendet.

Einige konkrete Beispiele, wie ich den Wert dieses Feldes ermitteln kann, würden mir sehr helfen.

Dustin
quelle

Antworten:

13

Haben Sie versucht, mit entity_metadata_wrapper auf die Werte zuzugreifen ?

$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
quelle
4
Hinweis für zukünftige Leser: Dies ist korrekt, aber für den Zugriff auf ein Entitätsfeld ist die Installation des Entitäts-API-Moduls nicht erforderlich. Der Drupal-Kern verfügt bereits über die Funktionen für den Zugriff auf ein Entitätsfeld.
Kiamlaluno
Ja, aber OP hat markiert und angegeben, dass das Entity-API-Modul installiert ist, daher entity_metadata_wrapper. Außerdem ist es eine Abhängigkeit des entityforms-Moduls.
David Thomas
2
entity-api ist das Tag für die von Drupal 7 implementierte Entity-API, nicht für das Entity-API-Modul. Der Hinweis soll vermeiden, dass Anfänger denken, dass das Entity-API-Modul für die Behandlung von Entitäten erforderlich ist. Ich habe nicht gesagt, dass die Antwort nicht richtig ist. :)
Kiamlaluno
7

Ohne das Entity-API-Modul zu verwenden, verwenden Sie field_get_items () , um den Wert eines mit einer Entität verknüpften Felds abzurufen . Sie übergeben nur den Entitätstyp, das Entitätsobjekt und den Feldnamen.

Um beispielsweise den Text eines Kommentars abzurufen, verwenden Sie den folgenden Code.

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

Um den Hauptteil eines Knotens abzurufen, können Sie den folgenden Code verwenden.

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

Das Entitätsobjekt ist das von entity_load () zurückgegebene Objekt oder eine bestimmte Ladefunktion für diese Entität, z. B. node_load () , comment_load () oder taxonomy_term_load () . In Drupal 8 sind diese Funktionen Wrapper für entity_load().

Wenn Sie den Inhalt des Feldes anzeigen möchten, sollten Sie field_view_field () verwenden .

kiamlaluno
quelle
0

Normalerweise können Sie auf $ node-Eigenschaften zugreifen, da Sie oder ein von Ihnen verwendeter Code zuvor node_load () aufrufen.

Sie müssen eine Entität vollständig laden, bevor Sie zu ihren Eigenschaften gelangen können.

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

Dann haben Sie tatsächlich ein geladenes Entitätsobjekt, das Sie in den Feldern von erhalten können.

Die Verwendung von dpm () ist mit jeder anderen Funktion identisch. Sie müssen lediglich das Entwicklungsmodul installieren.

Also mach so etwas:

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

Versuchen:

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

Dies sollte den Wert des Feldes drucken.

Wenn es sich um ein Array handelt, versuchen Sie Folgendes:

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

Denken Sie daran, dass dies die Rohausgabe ist. Je nachdem, woher der Wert stammt, müssen Sie den Wert hier möglicherweise manuell bereinigen.

Siehe: Funktion field_get_items

gkom
quelle
0

Platzieren Sie diese in einem Ihrer Module und gehen Sie zur Seite des Formulars. Dort finden Sie die Informationen, nach denen Sie suchen.

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

  dpm($form);

}
user39561
quelle
-1

Anstatt dpm zu verwenden und dieses Modul zu installieren, verwende ich:

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

Hoffentlich hilft Ihnen dies dabei, den Wert herauszufinden.

Brian
quelle
Hmmm, das gibt nichts für mich aus :( Könnte es sein, dass ich eine Entityform-Übermittlung und keinen Knoten ansehe? Oder wäre eine Entityform-Übermittlung tatsächlich ein Knoten? So verwirrt.
Dustin
Ich bin mir dann nicht sicher, ich würde annehmen, dass Sie eine andere Variable als $ node benötigen würden.
Brian
1
Die Frage betrifft den Zugriff auf ein Feld einer Entität und nicht das Drucken der Entität.
Kiamlaluno