it-swarm.com.de

Extrahieren eines bestimmten Datenteils eines Feldsammlungselements

Ich habe jetzt fast ein paar Tage damit herumgespielt, ohne Glück. Hier sind meine Sammlungsdaten:

Sammlungsname: field_video_collection

Innerhalb der Sammlung gibt es ein Feld namens: field_video_file_col

Meine Felder werden in meiner benutzerdefinierten field-collection-item--field_video_collection.tpl.php - Vorlage gut gedruckt. Ich habe die Dokumentation gemäß dieses Problem befolgt, um meinen Vorlagennamen zu erhalten, und ich drucke die Felder einfach als <?php print render($content['field_video_file_col']); ?> etc. ... innerhalb dieser Vorlage.

Nun zum lustigen Teil möchte ich das fid für jedes field_video_file_col - Element in der Sammlung in einem bestimmten Knoten extrahieren und als gedruckte Variable rendern. Ich folgte die Antwort in dieser Frage hier auf Stack, aber es scheint nicht für mich zu funktionieren. wenn ich mache:

print '<pre>';
var_dump(get_defined_vars());
print '</pre>';

Ich sehe, dass ich dies als Teil der Daten habe, die mir für field_video_file_col Zur Verfügung stehen.

["field_video_file_col"]=>
          array(1) {
            ["und"]=>
            array(1) {
              [0]=>
              array(12) {
                ["fid"]=>
                string(3) "888"

Daher scheint mir die FID in diesem Fall 888 zu sein, und ich möchte dies in meiner Vorlage rendern. Meine Knotenvorverarbeitungsfunktion ist als solche:

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'];
    }
}

Das benötigte Endergebnis ist, dass ich die Variable in meinem Feldsammlungselement rendern muss --field_video_collection.tpl.php Vorlage als:

<?php print $video_file_fid; ?>

... aber das scheint nicht zu funktionieren. Ich habe überall gesucht und viele verschiedene Inkarnationen dieses Codes und dieser Kombinationen ausprobiert, aber immer noch keine Freude.

7
Danny Englander

Ich verwende Entity API , wenn ich mit Field Collection Items arbeite. Siehe: Programmgesteuerte Feldsammlung mit Entity API erstellen und aktualisieren

Die Arbeit mit Feldsammlungen kann Folgendes bewirken:

// 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());

Wenn Sie Ihre field_collection-ID bereits kennen, können Sie einfach Folgendes tun:

$collection = entity_metadata_wrapper('field_collection_item', $fid);
//dsm the old value
debug($collection->field_video_file_col->value());

UPDATE:

verwenden Sie den obigen Code in MYTHEME_preprocess_node

UPDATE 2:

In Ihrem Fall wird es also sein:

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);
}

Eine Antwort finden Sie auch unter Feldsammlungswerte verstehen

8
milkovsky