Überprüfen Sie, ob ein Feld leer ist


18

Wie können Sie überprüfen, ob ein Feld leer ist, wenn Sie das $ node-Objekt haben?

Ich fand diese als mögliche Lösung:

$field = field_get_items('node', $node, 'field_post_image');

Ich kann jetzt überprüfen:

UPDATE .Ups! Das ist nicht zuverlässig, obwohl ich verspreche, dass es gestern bei mir funktioniert hat.

isset($field);

aber ich frage mich, ob es einen besseren Weg gibt.

Kläre mich auf

Antworten:


30

Wenn Sie die Dokumentation gelesen haben, kehrt die Funktion zurück, FALSEwenn keine Daten vorhanden sind. isset()würde tatsächlich scheitern, weil Sie FALSEder Variablen zuweisen , sie wurde also tatsächlich auf etwas festgelegt. Die richtige Syntax wäre:

$field = field_get_items('node', $node, 'field_post_image');
if ($field) {
   //Do something with the field
}
else{
   //There are no results
}

Das scheint der beste Weg zu sein. Wenn es leer ist, wird FALSE zurückgegeben, und wenn Daten vorhanden sind, wird ein Array zurückgegeben. Es besteht also keine Gefahr, dass $ field im Fall von
— Zahlenfeldern

Dies hat bei mir nicht funktioniert, da der Standardwert zurückgegeben wurde, wenn nichts festgelegt wurde.
— Fluss

@ Sam152 Danke! Dies hat gut funktioniert, wenn ich angemeldet war, aber wenn ich abgemeldet bin, wird nichts angezeigt. Gibt es einen Grund dafür und eine Lösung?
— Dan

Hallo Dan. Das Einloggen sollte keinen Einfluss auf den obigen Code haben. Vielleicht verwenden Sie devel, um eine Variable zu debuggen und anon Benutzer haben keinen "Zugriff auf Entwicklerinformationen"?
— Sam152

Dies ist die falsche Methode, um zu überprüfen, ob ein Feld leer ist. Sie sollten den Ansatz verwenden, der mit dem Aufruf von hook_field_is_empty beschrieben wurde, der vom Modul definiert wurde, das das Feld implementiert. Weitere Informationen finden Sie im Beitrag von kiamlaluno.
— Islinnet

8

Sie können das folgende Snippet verwenden, um zu überprüfen, ob ein Feld leer ist.

$info = field_info_field($field_name);
$function = $info['module'] . '_field_is_empty';

if (function_exists($function)) {
  $value = field_get_items('node', $node, $field_name);
  $is_empty = $function($value[0], $info);
}

Dieser Code ist sicherer, da verschiedene Felder unter verschiedenen Bedingungen als leer betrachtet werden. Siehe zum Beispiel den Unterschied zwischen file_field_is_empty () , number_field_is_empty () und taxonomy_field_is_empty () : taxonomy_field_is_empty()Überprüft die tid- Eigenschaft des $itemParameters, während number_field_is_empty()die value- Eigenschaft desselben Parameters überprüft wird. Bei benutzerdefinierten Feldern muss möglicherweise eine komplexere Bedingung überprüft werden, damit das Feld leer bleibt.

Die in der Dokumentation angegebene Beschreibung für hook_field_is_empty () lautet wie folgt:

Definieren Sie, was ein leeres Element für einen Feldtyp darstellt.


Ich schätze diese Antwort, aber hook_field_is_empty () scheint sehr weit zu gehen. Ich möchte wissen, ob das Feld wirklich leer ist. Zum Beispiel berücksichtigt number_field_is_empty, dass 0 ebenfalls leer ist. Ich teste auch, dass Sie diese Funktion nicht direkt anwenden können, wenn das Feld mehrwertig ist.
— Corbacho

1
Das macht empty (), wenn Sie eine Variable übergeben, die 0 enthält, oder die Zeichenfolge "0"; Es könnte sein, dass das Feld einen Wert verwendet, wenn es leer ist, und der Aufruf von hook_field_is_empty () ist die einzige Möglichkeit, um festzustellen, ob das Feld leer ist.
— kiamlaluno

Da ist ein Fehler. Sollte $ function sein ($ value [0], $ info); Siehe api.drupal.org/api/drupal/modules!field!field.api.php/function/…
— volocuga

2

Wir haben den Rohwert in ( $content['field_name']['#items'][0][value]) gefunden, damit Sie mit dem Ausdruck feststellen können, ob das Feld leer ist oder nicht

(! empty ($ content ['field_name'] ['# items'] [0] [value]))

wo field_nameentspricht den Namen des gewünschten Feldes.


Nein. Der Schlüssel "value" ist nur ein DB-Spaltenname. Sie kann je nach Feldtyp unterschiedlich sein. Ich denke, der beste Weg - überprüfen Sie hook_field_is_empty () (die erforderlich ist) wie oben vorgeschlagen
— volocuga

1

Drupal 8

Wenn jemand die gleiche Antwort in D8 benötigt, ist das, was ich mache, um mein Feld zu testen:

if ($entity->hasField('field_event_date_start')
  && !$entity->get('field_event_date_start')->isEmpty()) {
  // Do something ...
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.