Eigenes Node Template Feldinhalte werden nicht angezeigt?
Eingetragen von mamboklaus (14)
am 07.01.2013 - 16:07 Uhr in
am 07.01.2013 - 16:07 Uhr in
Liebe Druaplgemeinde,
bin relativ neu, aber dennoch schon recht weit:-)
Habe:
-Inhaltstyp erfolgreich angelegt
-ein passendes node tmpl erzeugt
- wird auch vom inhaltstyp gefunden und genutzt
habe bei dem entsprechendem Inhaltstyp vers. Felder, so z.B.:
Vorname --> field_vorname
Nachname--> field_nachname
Bild--> field_bild
in meinem name--node.tpl.php
möchte ich die Felder ausgeben und mache das so:
<?php
print render($field_nachname);
?>
ergebniss: nix wird angezeigt
mache ich es so:
<?php
print $field_nachname;
?>
kommt als Ausgabe Array
ich in ein wenig verunsichert .. wo mache ich den Fehler????
kann mir jemand Tips oder links geben die mir weiterhelfen könnten?
Danke
Klaus
- Anmelden oder Registrieren um Kommentare zu schreiben
Warum nutzt Du nicht Display
am 07.01.2013 - 19:54 Uhr
Warum nutzt Du nicht Display Suite?
http://drupal.org/project/ds
Gelöst
am 07.01.2013 - 19:55 Uhr
uff, selber gelöst... richtig ist:
<?php
print render($content['field_nachname']);
?>
kaum macht man es richtig = alles in butter:-)
Kleiner Hinweis noch, der
am 07.01.2013 - 20:03 Uhr
Kleiner Hinweis noch, der Vollständigkeit halber - Ich würde, auch zur Sicherheit und konsequenteren Umsetzung für die Zukunft, immer auch abfragen, ob überhaupt etwas im Feld ist. Das kann dazu führen, dass Drupal versucht Felder dazustellen, die eventuell gar nicht gefüllt sind, und dann gibt es Fehlermeldungen. Alternativ kannst du so auch einen else-Fall mit einbauen. Ich gebe Felder eigentlich immer so aus, wobei man das natürlich z.B. bei multi-value-Feldern anpassen muss/kann:
<?php if (!empty($field_nachname)): ?>
<?php print $content['field_nachname']['#items']['0']['value']; ?>
<?php else: ?>
<?php endif; ?>
Oder einfach:
<?php if (!empty($field_nachname)): ?>
<?php print $content['field_nachname']['#items']['0']['value']; ?>
<?php endif; ?>
DANKE!
am 07.01.2013 - 20:17 Uhr
... klappt prima!
Eine andere Möglichkeit - mit
am 07.01.2013 - 21:14 Uhr
Eine andere Möglichkeit - mit einigen Vorteilen - ist die Benutzung der field_view_field() Funktion:
if (field_view_field('node', $node, 'field_nachname')):
print render (field_view_field('node', $node, 'field_nachname'))
endif;
Erstens gibt es des öfteren Probleme, wenn man ein Array auf empty abfragt,
Zweitens ist es dann egal, ob das Feld im Inhaltstyp auf visible eingestellt ist,
Drittens hat man den komfortableren Zugriff, z.B auf Formate:
<?php
render(field_view_field('node', $node, 'field_image', array('settings' => array('image_style' => 'my_style'))));
?>
Da merkt man mal wieder, dass
am 07.01.2013 - 21:17 Uhr
Da merkt man mal wieder, dass ich kein Coder bin. Aber so habe ich auch noch was gelernt. :)
wusst ich doch - lg ;)
am 07.01.2013 - 21:21 Uhr
wusst ich doch - lg ;)
oh Mann, ich wünschte ich check das:-(
am 07.01.2013 - 21:48 Uhr
Ich habe folgendes tpl erzeugt, (asl muster, damit ich sehe was estut, und? es tut sich was komisches!
die ersten drei /Titel/Vorname/nachname) werden angezeigt, Vita und das Bild nicht :-( warum wohl???? ich check das nich, grübel
Titel:
<?php
" rel="bookmark" rel="nofollow">print $node_url;
?>
<?php
print $title;
?>
Vorname:
<?php
if (!empty($field_nachname)):
?>
<?php
print $content['field_nachname']['#items']['0']['value'];
?>
<?php
else:
?>
<?php
endif;
?>
Nachname:
<?php
if (!empty($field_vorname)):
?>
<?php
print $content['field_vorname']['#items']['0']['value'];
?>
<?php
else:
?>
<?php
endif;
?>
Vita:
<?php
if (!empty($field_vita)):
?>
<?php
print $content['field_vita']['#items']['0']['value'];
?>
<?php
else:
?>
<?php
endif;
?>
Bild:
<?php
if (!empty($field_bild)):
?>
<?php
print $content['field_bild']['#items']['0']['value'];
?>
<?php
else:
?>
<?php
endif;
?>
für das Bild:print
am 07.01.2013 - 22:38 Uhr
für das Bild:
print render($content['field_bild'])
benutzen.
Das Array ist ganz anders aufgebaut...
Um zu verstehen, worum es geht, kannst du Dir mal das Devel Modul http://drupal.org/project/devel installieren, damit kannst Du die einzelnen Elemente "inspizieren"
[EDIT]
Drupal stellt sogenannte render-Arrays http://drupal.org/node/930760 zur Verfügung
Das hast vorher zwei verschieden Ansätze genützt:
a) mit print $content['field_bild']['#items']['0']['value']; hast Du direkt auf den Wert des Keys "value" zugegriffen.
b) mit print render($content['irgendeinfeld']) greifst Du auf die render() Funktion zu (dir wiederum die drupal_render() aufruft), welche das Render-Array ($content['irgendeinfeld']) rekursiv durchgeht und für die Anzeige aufbereitet. http://api.drupal.org/api/drupal/includes!common.inc/function/drupal_render/7 - dir also meist die Arbeit abnimmt...