Je joue avec ça depuis plusieurs jours maintenant sans succès. Voici mes données de collection:
Nom de la collection: field_video_collection
Dans la collection, il y a un champ appelé: field_video_file_col
Mes champs s'impriment bien dans mon modèle field-collection-item--field_video_collection.tpl.php
Personnalisé, j'ai suivi la documentation selon ce problème pour obtenir le nom de mon modèle et j'imprime simplement les champs comme <?php print render($content['field_video_file_col']); ?>
etc ... dans ce modèle.
Maintenant, pour la partie amusante, j'aimerais extraire le fid
pour chaque élément field_video_file_col
De la collection dans un nœud donné et le rendre sous forme de variable imprimée. J'ai suivi la réponse à cette question ici sur Stack mais cela ne semble pas fonctionner pour moi. si je fais:
print '<pre>';
var_dump(get_defined_vars());
print '</pre>';
Je constate que je l'ai dans le cadre des données dont je dispose pour field_video_file_col
["field_video_file_col"]=>
array(1) {
["und"]=>
array(1) {
[0]=>
array(12) {
["fid"]=>
string(3) "888"
Il me semble donc que le FID est 888 dans ce cas et je veux le rendre dans mon modèle. Ma fonction de prétraitement de nœud est en tant que telle:
function MYTHEME_preprocess_node(&$vars, $hook) {
$entity_type = 'field_collection_item';
$bundle_name = 'field_field_video_collection'; // Field name the collection is attached to
$field_name = 'field_video_file_col'; // Field name within the field collection
$video_file_fid = field_info_instance($entity_type, $field_name, $bundle_name);
if ($video_file_fid) {
$my_fid = $video_file_fid['fid'];
}
}
Le résultat final nécessaire est que je dois rendre la variable dans mon field-collection-item --field_video_collection.tpl.php modèle comme:
<?php print $video_file_fid; ?>
... mais cela ne semble pas fonctionner. J'ai cherché partout et essayé de nombreuses incarnations différentes de ce code et de ces combinaisons, mais toujours pas de joie.
J'utilise API d'entité lorsque je travaille avec des éléments de collection de champs. Voir: Créer et mettre à jour par programme la collection de champs avec l'API d'entité
Travailler avec des collections de champs peut faire quelque chose comme ceci:
// Wrap node with Entity API
$node_wrapper = entity_metadata_wrapper('node', $node);
// Get the first item from the muli-value field collection
$raw_collection = $node_wrapper->field_video_collection[0]->value();
// Wrap it with Entity API
$collection = entity_metadata_wrapper('field_collection_item', $raw_collection);
//dsm the old value
debug($collection->field_video_file_col->value());
Si vous connaissez déjà votre identifiant field_collection, vous pouvez simplement faire:
$collection = entity_metadata_wrapper('field_collection_item', $fid);
//dsm the old value
debug($collection->field_video_file_col->value());
MISE À JOUR:
utilisez le code ci-dessus dans MYTHEME_preprocess_node
MISE À JOUR 2:
Donc dans votre cas ce sera:
function MYTHEME_preprocess_node(&$vars, $hook) {
if (empty($vars['nid'])) {
return;
}
// Wrap node with Entity API
$node_wrapper = entity_metadata_wrapper('node', $vars['nid']);
// Get the first item from the muli-value field collection
$raw_collection = $node_wrapper->field_video_collection[0]->value();
// Wrap field collection with Entity API
$collection = entity_metadata_wrapper('field_collection_item', $raw_collection);
// print value
$fid = $collection->field_video_file_col->value();
debug($fid);
}
Vous pouvez également trouver une réponse sur Comprendre les valeurs de collecte de champs