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 mit dem Namen: field_video_file_col
Meine Felder werden in meiner benutzerdefinierten field-collection-item--field_video_collection.tpl.php
Vorlage einwandfrei gedruckt. Ich habe die Dokumentation gemäß diesem Problem befolgt , um meinen Vorlagennamen zu erhalten, und ich drucke die Felder einfach als <?php print render($content['field_video_file_col']); ?>
etc ... in 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 habe die Antwort in dieser Frage hier auf Stack befolgt, aber es scheint für mich nicht 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 zur Verfügung stehen field_video_file_col
["field_video_file_col"]=>
array(1) {
["und"]=>
array(1) {
[0]=>
array(12) {
["fid"]=>
string(3) "888"
Es scheint mir also, dass die FID in diesem Fall 888 ist und ich möchte das 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 Endergebnis ist, dass ich die Variable in meinem Feldfeldsammlungselement - field_video_collection.tpl.php- Vorlage wie folgt rendern muss :
<?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.
Antworten:
Ich verwende die Entitäts-API, wenn ich mit Feldsammlungselementen arbeite. Siehe: Programmgesteuertes Erstellen und Aktualisieren der Feldsammlung mit der Entitäts-API
Die Arbeit mit Feldsammlungen kann Folgendes bewirken:
Wenn Sie Ihre field_collection-ID bereits kennen, können Sie einfach Folgendes tun:
AKTUALISIEREN:
Verwenden Sie den obigen Code in
MYTHEME_preprocess_node
UPDATE 2:
In Ihrem Fall wird es also sein:
Eine Antwort finden Sie auch unter Grundlegendes zu Feldsammlungswerten
quelle
MYTHEME_preprocess_node
Funktion einfügen und Ihre Variable in einen$variables
Wert setzen, den Ihr Beispielcode nicht tut. Er zeigt Ihnen, wie Siefield_collection
von ihrem Knoten aus einen Verweis auf die Entität selbst erhalten und dann das betreffende Feld aus der Sammlung entfernen. Sie übernehmen Ihre Vorverarbeitungsfunktion und fügen seinen Code ein. Sie können also die folgende Variable in Ihre Vorverarbeitungsfunktion schreiben.$vars['video_file_fid'] = $collection->field_video_file_col->value();
node_wrapper
nirgendwo verwendet wird.Sie können diesen versuchen. Die erste Zeile erhält das Objekt, die zweite Zeile die FID.
quelle
current
Nimmt das Argument als Referenz, daher müssen Sie diese in separate Variablen einfügen.Unused local variable 'video_file_fid'. The value of the variable is not used anywhere.A variable is considered unused in the following cases: * The value of the variable is not used anywhere or is overwritten immediately. * The reference stored in the variable is not used anywhere or is overwritten immediately
['fid]
,['fid']
aber das ist nebensächlich.Der Code von dropbucket kann hilfreich sein, um alle Daten der Feldsammlung in einem Array abzurufen und vorzubereiten:
quelle
_preprocess_node
,_preprocess_page
Funktion oder andere?