Statt des node Titels den Inhalt eines oder mehrerer CKK Felder anzeigen
Eingetragen von LJR (132)
am 13.09.2010 - 16:12 Uhr in
am 13.09.2010 - 16:12 Uhr in
Ich würde gerne für manche Inhaltstypen eigene node.tpl.php erstellen, in denen statt des Titels der Inhalt eines ckk Feldes angezeigt wird. Ich würde also gerne $title durch einen entsprechenden String ersetzen. Gibt es da eine Möglichkeit?
- Anmelden oder Registrieren um Kommentare zu schreiben
Automatic Nodetitles hilft da
am 13.09.2010 - 16:18 Uhr
Automatic Nodetitles hilft da weiter.
Automatic Nodetitle. Da
am 13.09.2010 - 16:24 Uhr
Automatic Nodetitle. Da brauchst du keine eigenen Templates anlegen
C.A.W. Webdesign
Ich merke, ich habe mich
am 13.09.2010 - 16:35 Uhr
Ich merke, ich habe mich nicht klar genug ausgedrückt. Ist auch ein bißchen kompliziert.
Ich benutze schon Automatic nodetitels, weil sich der Titel, um das Feld eindeutig zu idendifizieren, aus mehreren ckk Feldern zusammensetzt. Das liegt daran, dass sich bei vielen ckk Feldern der Inhalt wiederholt und so viele NodeTitel identisch wären. So bleibt jeder Titel trotzdem einmalig und das hilft mir beim Verwalten der Inhalte.
Dadurch wird der Titel aber unnötig lang, und das sieht nicht gut aus im Layout.
Lange Rede kurzer Sinn, es soll eben nicht der Titel als Solches angezeigt werden, sondern nur ein bestimmtes CKK Feld im Kopfbereich des nodes, als Titel erscheinen. So können manche Nodes angezeigt werden, als hätten Sie den selben Titel, für mich haben sie ihn aber beim Verwalten nicht.
Automatic Node Titels hilft mir hier nur teilweise weiter, weil es immer den tatsächlichen Titel anzeigt. Der soll aber verborgen werden.
Zur Not könnte ich ihn auch einfach im Template auskommentieren. Aber es sähe besser aus, wenn ein kurzer Titel in größeren Buchstaben da steht.
Automatic Nodetitle reicht
am 13.09.2010 - 16:39 Uhr
Automatic Nodetitle reicht noch nicht ganz aus, du brauchst für die Muster auch noch das token Modul, aber damit klappt es dann ganz ausgezeichnet.
btw: in meinem neuestesn Video (Klick) stelle ich übrigens genau das vor :-)
mußte mal reinschauen
Drupal Video-Tutorials
Konkretes Beispiel
am 13.09.2010 - 16:54 Uhr
Ich habe, glaube ich, zu umständlich und abstrakt mein Problem dargestellt. Hier ein konkretes Beispiel.
Es handelt sich bei der Seite unter anderem um einen Veranstaltungskalender für Theaterinszenierung. Man soll zum Beispiel eingeben können, wo wird über all Hamlet gespielt, und er zeigt an, in Köln, Dortumund und Berlin. Nun gibt es einen Inhaltstyp Inszenierungen. Dort können in einem Formular Angaben zur Inszenierung gemacht werden, unter anderem den Namen des Theaters, der Stadt und der Regiesseurs. Aus diesen Angaben setzte ich mit Automatic NodeTitles den Titel der Nodes zusammen. Der Node heißt also zum Beispiel "Hamlet - Pfalztheater Kaiserslautern - Johannes Reitmeier" und in Berlin und Dortmund dementsprechend anders. So sehe ich beim Verwalten des Inhalts immer um welche Inszenierung es sich genau handelt.
Soweit so gut. Im fertigen Node sieht dieser Wasserkopf aber blöd aus, zumal all die Angaben untendrunter im Node gleich nochmal stehen. Das wirkt allbern. Dort soll bei allen drei Anzeigen als Kopf nur in großen Buchstaben "Hamlet" stehen.
Würden aber alle Nodes tatsächlich nur Hamlet heißen, wüsste ich bei der Inhaltsverwaltung nicht auf den ersten Blick um welche Hamletinszenierung es sich bei den jeweiligen Nodes handelt.
Dort wo der Node Titel angezeigt wird, soll also nicht der Titel des Nodes erscheinen, sondern das CKK Feld, dass den Inhalt des CKK Feldes "Stücktitel" Stücks anzeigt.
Automatic Nodetitel stößt hier an die Grenze. Es geht auch nicht um den Titel als solches, sonderen um das, was an entsprechender Stelle angezeigt wird, und das soll nicht der Titel sein.
Du kannst im Template statt
am 13.09.2010 - 17:05 Uhr
Du kannst im Template statt der Variable einfach dein gewünschtes Feld ausgeben.
<?php
$field_name = 'mein-Titelfeld';
if ($node->content && is_array($node->content[$field_name]) && isset($node->content[$field_name]['#children'])) {
print $node->content[$field_name]['#children'];
}
?>
Dann bleibt Dir wirklich
am 13.09.2010 - 17:10 Uhr
Dann bleibt Dir wirklich nichts anderes, als einen eigenen Template-File für diesen Nodetyp zu basteln. Ein ganz einfacher könnte z.b. so ausehen:
<div class="node<?php if (!$status) { print " node-unpublished"; } ?>">
<?php if ($page == 0) : ?>
<h2 class="nodeTitle">
<a href="<?php print $node_url; ?>">
<?php print $title; ?>
</a>
</h2>
<?php endif; ?>
<div class="foto">
<div class="bild"><?php print $node->field_bild[0][view]; ?></div>
<div class="fototext"><?php print $node->field_bild[0][data][description]; ?></div>
</div>
<?php if ($links) : ?>
<div class="links">
<?php print $links; ?>
</div>
<?php endif; ?>
</div>
Das ist einfach der Standard node.tpl.php aus dem Theme (oder aus dem Node-Modul) zusammengestrichen und für einen speziellen Zweck geändert.
Ob und was Du wegstreichst oder zufügst mußt Du selbst wissen. Es hilft, die $node-Struktur ausgeben um nachzusehen.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Nur für das Protokoll:Falls
am 13.09.2010 - 21:12 Uhr
Nur für das Protokoll:
Falls jemand auf den Thread stößt und als Titel in der Tat nur einen Teil eines CCK-Feldes haben möchte, dann würde das folgende Code-Schnippsel in das Feld
Pattern for the title:
funktionieren....
(angenommen, das Feld hat die Bezeichnung field_vorname und es sollen die ersten 5 Zeichen als Titel genommen werden)
<?php
print (substr($node->field_vorname[0]['value'],0,5));
?>
Ich habe es noch mal reingeschrieben, weil auch die Syntax etwas anders ist, als bei der Anzeige im Template
liebe Grüße
Berthold
Drupal Video-Tutorials
Erst mal vielen Dank für die
am 14.09.2010 - 09:08 Uhr
Erst mal vielen Dank für die prombten, zahlreichen Antworten.
Ich habe es jetzt nach dem Vorschlag von tiger mal gewagt. Ich habe die folgenden Zeilen in ein template speziell für den entspechenden Inhaltstyp eingefügt:
<?php
$field_name = 'mein-Titelfeld';
if ($node->content && is_array($node->content[$field_name]) && isset($node->content[$field_name]['#children'])) {
print $node->content[$field_name]['#children'];
}
?>
wobei ich natürlich 'mein-titelfeld' durch den Namen des gewünschten Feldes ersetzt habe. 'field_werktitel'. Anschließend habe ich $title durch $field_name ersetzt.
Nun zeigt er aber statt des Inhalts des Feldes den Titel des Feldes an, und alle entsprechenden Artikel haben als Überschrift field_werktitel.
Wie bringe ich ihn aber dazu den Inhalt des Feldes anzuzeigen?
Gib doch mal mit print_r den
am 14.09.2010 - 09:37 Uhr
Gib doch mal mit print_r den Inhalt deines nodes an. Im Quelltext siehst du dann genau, wie du dein Feld ansprechen musst.
Wie geht das?
am 14.09.2010 - 10:46 Uhr
Bin leider absoluter Anfänger was php angeht. Wie mache ich das? Gebe ich das an der shell ein? Und wenn ja wie?
ein Blick auf php.net hätte
am 14.09.2010 - 10:58 Uhr
ein Blick auf php.net hätte da genügt :-)
klick - Funktion print-r
Drupal Video-Tutorials
Von dieser Handbuchseite
am 14.09.2010 - 11:00 Uhr
Von dieser Handbuchseite genommen: http://drupal.org/node/11816
$node (object)
The node object. To view all of the properties of a current $node object, put the following line of code in your node.tpl.php:
<pre><?php print_r($node); ?></pre>
Also o.g. Code in deine node.tpl.php Datei schmeißen, dann kriegst du ne wild aussehende Anzeige :)
P.S. Ein Blick auf php.net bringt PHP-Anfängern nichts, weil da der Zusammenhang zu Drupal fehlt.
undpaul
Longevity Insights from Top Health Podcasts
Der spukct tatsächlich 'ne
am 14.09.2010 - 11:57 Uhr
Der spukct tatsächlich 'ne ganze Menge aus. Ich weiß aber nicht, was ich davon bei
$field_name = 'mein-Titelfeld';
eintragen soll.Ich habe die Ausgabe hier als Datei angehängt. Wer Lust und Zeit hat, wäre nett, wenn er mal drauf guckt.
Wieso genau meinst du, dass
am 14.09.2010 - 12:05 Uhr
Wieso genau meinst du, dass automatic nodetitles nichts für dich ist? Damit kannst du doch CCK-Felder anstelle des Titels zeigen. Dann wird auch bei der Eingabe kein Titel-Feld angezeigt. Oder ist es so, dass du den Titel doch brauchst und eingeben willst, und nur an einer Stelle die CCK-Felder statt Titel willst?
undpaul
Longevity Insights from Top Health Podcasts
Vielleicht habe ich was falsch verstanden.
am 14.09.2010 - 12:46 Uhr
Ich benutze ja automatic nodetitels. Vielleicht habe ich auch was nicht verstanden, aber automatic nodetitels zeigt nicht ckk-Felder anstelle des Titels an, sondern erstellt einen Titel aus ckk Feldern und zeigt diesen an. Ich möchte aber, das nicht der Originaltitel angezeigt wird, sonern nur ein bestimmtes Feld. Das ist ein wenig unüblich und erweist sich als schwieriger als gedacht. Zumindest für einen Anfänger wie mich.
Ersetze einfach die Variable
am 14.09.2010 - 13:14 Uhr
Ersetze einfach die Variable $title in deinem Template mit $node->field_werktitel[0]['value']
LJR schrieb Ich benutze ja
am 14.09.2010 - 13:21 Uhr
Ich benutze ja automatic nodetitels. Vielleicht habe ich auch was nicht verstanden, aber automatic nodetitels zeigt nicht ckk-Felder anstelle des Titels an, sondern erstellt einen Titel aus ckk Feldern und zeigt diesen an. Ich möchte aber, das nicht der Originaltitel angezeigt wird, sonern nur ein bestimmtes Feld. Das ist ein wenig unüblich und erweist sich als schwieriger als gedacht. Zumindest für einen Anfänger wie mich.
Das hast du richtig verstanden. Hätte jetzt nicht gedacht, dass das ein Problem für dich ist. Dann kannst du wirklich im Node Template einfach die Titel-Variable entfernen und mit dem CCK-Feld ersetzen. Das dürfte bei der Teaser-Ansicht aber nicht funktionieren, um das gleich dazuzusagen.
undpaul
Longevity Insights from Top Health Podcasts
$node->field_werktitel[0]['va
am 14.09.2010 - 13:34 Uhr
$node->field_werktitel[0]['value'] hat gefunzt. Super.
Das dürfte bei der Teaser-Ansicht aber nicht funktionieren, um das gleich dazuzusagen.
Stimmt leider auch. Warum eigentlich?
Du kannst die Ansicht ja
am 14.09.2010 - 13:41 Uhr
Du kannst die Ansicht ja anpassen und als Zeilendesign Felder wählen statt Beitrag.
Weil an der Stelle nicht das
am 14.09.2010 - 13:42 Uhr
Weil an der Stelle nicht das Node Template greift, sondern page.tpl.php. Umgehen kannst du das, indem du deine Übersichtsseiten, auf denen Teaser vorkommen, mit Views anlegst. Und zwar mit Feld-Displays statt Node-Displays. Denn wenn mich nicht alles täuscht, kannst du die page.tpl.php nicht so überlisten wie die node.tpl.php, weil dir dort das Node Objekt nicht zur Verfügung steht.
undpaul
Longevity Insights from Top Health Podcasts