it-swarm.com.de

Wie durchlaufe ich Felder aus der Feldsammlung?

Hier unten sind die Code-Ladedaten aufgeführt, die in der Feldsammlung vorhanden sind.
$ field_collection = entity_load ('field_collection_item', $ ids = FALSE);

In jeder Feldsammlung gibt es viele Felder. Ich möchte jedes Feld durchlaufen. Gibt es eine Möglichkeit, dies zu tun? Irgendeine Hilfe?

6
Kiran Kumar

Ich bin derzeit "Kampf" Breite dieses Moduls auch. Ich weiß nicht, ob es der richtige/einfachste Weg ist, aber es funktioniert (für mich).

Zuerst müssen Sie die IDs der Feldsammlungsfelder des Knotens laden:

$fc_fields = field_get_items('node', $node, 'field_image_teaser');

// Extract the field collection item ids
$ids = array();
foreach ($fc_fields as $fc_field) {
    $ids[] = $fc_field['value'];
}

Ich habe den obigen Code unter Zugriff auf eine Feldsammlung (eine verwandte Frage) gefunden.

Um alle Felder zu durchlaufen, können Sie den folgenden Code verwenden:

//Get the entities
$collections = field_collection_item_load_multiple($ids);

//Loop over the array - if you have more than one entity
for ($i = 1; $i <= sizeof($collections); $i++) {
    $collection = $collections [$i];

    //Iterate over all member vars of the FieldCollectionItemEntity object
    foreach($collection as $key => $value) {
        //Look for fields - there are some other class vars, too.
        if (strpos ($key, 'field') !== false) {
            //Search for textfields 
            if (isset($value['und']) && is_array($value ['und']) && isset($value['und'][0]['value'])) {
                print "Field ".$key." ".$value['und'][0]['value'];
            }
        }
    }                   
} 
9
crashbus
$fc_fields = field_info_instances('field_collection_item', $field_name);

Dies wird wahrscheinlich helfen.

3
AlxVallejo

Die zweite Iteration muss wie folgt erfolgen. Aus folgenden Gründen,

  • Das Ergebnis von field_collection_item_load_multiple wird kein 0-basiertes Array sein.
  • Bei Bildern befindet sich die URL nicht im Index ['und'] [0] ['Wert']

    //Get the entities
    $collections = field_collection_item_load_multiple($ids);
    $loadedValues;
    //Loop over the array - if you have more than one entity
    $i = 0;
    foreach ($collections as $collection) {
    
        //Iterate over all member vars of the FieldCollectionItemEntity object
        foreach($collection as $key => $value) {
            //Look for fields - there are some other class vars, too.
            if (strpos ($key, 'field') !== false) {
                //Search for textfields 
                if (is_array($value) && isset($value['und']) && is_array($value ['und']) && (isset($value['und'][0]['value'])||isset($value['und'][0]['uri']))) {
                    // print "Field ".$key." ".$value['und'][0]['value'];
                    if(isset($value['und'][0]['value']))
                    {
                        $loadedValues[$i][$key] = $value['und'][0]['value'];
                    }
                    else if($value['und'][0]['uri'])
                    {
                        $loadedValues[$i][$key] = $value['und'][0]['uri'];
                    }
                }
            }
        }
        $i++;
    }
    
0

Dieser Code von @AlxVallejo gibt Ihnen die Feldsammlungsstruktur (ein Array von Felddefinitionen). Damit können Sie Ihre Entität anschließend durchlaufen. Weiter zu entwickeln ist also ein Vorschlag:

$fc_fields = field_info_instances('field_collection_item', $field_name);
$field_list = array_keys($fc_fields);

foreach ($field_list as $key) {
  // access your current field using $field_collection_entity->{$key} 
}