Wie kann ich eine Liste aller ausgewählten Werte für ein Feld erhalten?
Zum Beispiel habe ich ein Feld namens Länder und möchte, dass alle Länder für einen bestimmten Knoten ausgewählt werden.
Ich benötige diese Liste, da die Region je nach ausgewähltem Land automatisch in einem anderen Feld (Regionen) ausgewählt werden soll.
Beispiel: Ich wähle Frankreich in den Ländern, dann wird automatisch die europäische Region in Regionen ausgewählt
Im Moment kann ich nur die ausgewählten Werte im Feld "Länder", im Feld "Regionen" auf folgende Weise kopieren:
$node->field_regions = $node->field_countries;
Hier ist das Ergebnis, wenn ich Frankreich im Feld Länder auswähle:
Country: France
Regions: France
Bearbeiten : Ich habe es mit der Funktion versucht: field_get_items (), aber alles was ich bekomme ist ein Array:
$items = field_get_items('node', $node, 'field_countries', $node->language);
Irgendwas stimmt nicht? Ich habe es auch versucht, aber ich bekomme das gleiche Ergebnis ...
$items = $node->field_countries[$node->language][0]
foreach
, wie:foreach ($node->field_countries[$node->language] as $item) { $val = $item['value']; // Do something with $val }
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).
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:
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.)
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.
(*) 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:
Dies garantiert, dass $ items immer ein Array ist. Aber für Schnipsel darüber hilft uns das nicht wirklich.
quelle