Voici ci-dessous les données de chargement de code présentes dans la collection de champs.
$ field_collection = entity_load ('field_collection_item', $ ids = FALSE);
Dans chaque collection de champs, il y a beaucoup de champs, je voudrais parcourir chaque champ, y a-t-il un moyen de le faire? De l'aide?
Je suis actuellement en train de "combattre" la largeur de ce module. Je ne sais pas si c'est la manière correcte/la plus simple, mais cela fonctionne (pour moi).
Vous devez d'abord charger les identifiants des champs de collecte de champs du nœud:
$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'];
}
J'ai trouvé le code ci-dessus à Accès à une collection de champs (une question connexe).
Pour parcourir tous les champs, vous pouvez utiliser le code suivant:
//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'];
}
}
}
}
$fc_fields = field_info_instances('field_collection_item', $field_name);
Cela vous aidera probablement.
La deuxième itération doit être de la manière ci-dessous. Pour les raisons suivantes,
field_collection_item_load_multiple
ne sera pas un tableau basé sur 0.Pour les images, l'URL ne sera pas dans l'index ['und'] [0] ['value']
//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++;
}
Ce code de @AlxVallejo vous donnera la structure de la collection de champs (un tableau de définitions de champs). Vous pouvez l'utiliser pour parcourir votre entité en boucle après cela. Donc, développer est une suggestion:
$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}
}