field_get_items()ist die Lösung, die normalerweise empfohlen wird. Es gibt jedoch einige Einschränkungen.
Es ist wichtig zu überprüfen, ob das Feld leer ist. In diesem Fall gibt field_get_items () false zurück (was scheiße ist).
$items = field_get_items('node', $node, 'field_countries', $node->language);
if (!empty($items)) {
$item = reset($items);
return $item['value'];
}
else {
return NULL;
}
Ich denke, Sie können im Allgemeinen sicher sein, dass ein Element, wenn es existiert, im Index Null [0] liegt. Und isset () ist eine sehr robuste Sache. Also funktioniert auch folgendes:
$items = field_get_items('node', $node, 'field_countries', $node->language);
return isset($items[0]['value']) ? $items[0]['value'] : NULL;
Bei einigen Feldtypen befindet sich der Wert nicht in $ item ['value'], sondern in $ item ['tid'] oder etwas anderem.
Im Normalfall (ich kann mir keine Ausnahme atm vorstellen) ist der Wert das erste im Array $ item. Das Folgende wird also auch funktionieren, aber dies ist eher zufällig als beabsichtigt. Ich persönlich würde mich also nicht darauf verlassen.
(Wenn $ items ein (nicht leeres) Array ist, können wir sicher (*) davon ausgehen, dass jedes $ item auch ein Array ist und nicht etwas anderes.)
$items = field_get_items('node', $node, 'field_countries', $node->language);
return isset($items[0]) ? reset($items[0]) : NULL;
Der Rückgabewert von field_get_items () ist by-value, daher ist es im Allgemeinen in Ordnung, das Array $ items zu ändern. Dies bedeutet, dass Sie array_shift () verwenden können.
$items = field_get_items('node', $node, 'field_countries', $node->language);
return !empty($items) ? array_shift(array_shift($items)) : NULL;
(*) Die meisten Annahmen, die wir hier treffen, basieren nicht auf Garantien auf Sprachebene, sondern nur darauf, wie Drupal im Allgemeinen funktioniert.
Übrigens kann der folgende Trick manchmal hilfreich sein, aber er ist keine vollständige Lösung der ursprünglichen Frage:
$items = field_get_items(..) ?: array();
Dies garantiert, dass $ items immer ein Array ist. Aber für Schnipsel darüber hilft uns das nicht wirklich.