2015-10-15 5 views
1

S'il vous plaît nu avec un utilisateur très récent de Drupal. Je veux créer un tableau parmi tous les exemples de la chaîne "url" sur un site Drupal. J'ai déjà utilisé la méthode "field_get_items" pour faire quelque chose de très similaire, mais j'essaie maintenant d'accéder à une collection de champs qui est à plusieurs niveaux dans le tableau du nœud et je ne suis pas sûr que cette méthode fonctionne.Accéder aux valeurs de tableau d'une collection de champs dans un nœud avec Drupal?

$website_urls = array(); 
$faculty_members = field_get_items('node', $node, 'field_faculty_member'); 
for ($i = 0; $i < count($faculty_members); $i++) { 
    $value = field_view_value('node', $node, 'field_faculty_member', $faculty_members[$i]); 
    $field_collection = $value['entity']['field_collection_item'][key($value['entity']['field_collection_item'])]; 
    $website_urls[] = render($field_collection['field_link']['#items'][0]['url']); 
} 

Un exemple d'un emplacement de l'URL est ...

[ 'field_faculty_program'] [0] [ 'entité'] [ 'field_collection_item'] [1842] [ 'field_faculty_member'] [0] [ 'entité'] [ 'field_collection_item'] [1843] [ 'field_link'] [ 'items'] [0] [ 'url']

..et une autre ...

[ 'field_faculty_program '] [4] [' entité '] [' field_collection_item '] [1854] [' field_faculty_member '] [0] [' entity '] [' field_collection_item '] [1855] [' field_link '] [' # items '] [0] ['url']

Quelle méthode dois-je utiliser pour collecter toutes les chaînes 'url' à placer dans un tableau?

Répondre

1

Vous pouvez toujours utiliser la fonction field_get_items() mais la transmettre à la place 'field_collection_item' à la place pour le type de noeud.

Quelque chose comme cela devrait fonctionner:

if ($items = field_get_items('node', $node, 'field_faculty_member')) { 

    //loop through to get the ids so we can take 
    //advantage of field_collection_item_load_multiple for 
    //greater efficiency 
    $field_collection_item_ids = array(); 
    foreach ($items as $item) { 
    $field_collection_item_ids[] = $item['value']; 
    } 

    if ($field_collection_items = field_collection_item_load_multiple($field_collection_item_ids)) { 
    foreach ($field_collection_items as $subitem) { 

     //now we load the items within the field collection 
     if ($items = field_get_items('field_collection_item', $subitem, 'field_faculty_member')) { 

     //And you can then repeat to go deeper and deeper 
     //e.g. a field collection item within a field collection 
     //for instance to get the urls within your faculty members 
     //item. Best to break this into functions or a class 
     //to keep your code readable and not have so many nested 
     //if statements and for loops 

     } 

    } 
    } 

} 

Hope that helps!

Scott