Contemplate .. Wie sieht ein standard Template für node aus?
Eingetragen von florianr (122)
am 16.10.2007 - 23:52 Uhr in
am 16.10.2007 - 23:52 Uhr in
Hallo!
Ich habe etwas Probleme mit contemplate, ich bekomme zwar die Ausgabe der Felder hin, wie ich es haben möchte, aber dann bekomme ich es nicht hin, dass der restliche Node wie üblich formatiert wird.
Gibt es irgendwo eine Vorlage für ein Standard Template, wie es auch vom drupal core ausgegeben würde?
- Anmelden oder Registrieren um Kommentare zu schreiben
Schau Dir doch einfach mal
am 17.10.2007 - 02:10 Uhr
Schau Dir doch einfach mal die node.tpl.php im Garland-Theme an.
Soweit ich das verstanden
am 17.10.2007 - 13:01 Uhr
Soweit ich das verstanden habe, gibt node.tpl.php doch mit $content gerade das aus, was ich mit contemplate theme.
Dann finde ich doch in nodes.tpl.php nichts dazu, wie ein contemplate ausfgebeuat sein muss?
Hat eine Logik
am 17.10.2007 - 14:52 Uhr
also die Templates haben eine Hierarchie,
höhere Zahl bedeutet übergeordnet:
1. template.php
2. page.tpl.php
3. node.tpl.php
Wenn du reinguckst in die node.tpl.php, ist da zwar auch
eine Variable $content, aber die bedeutet was anderes als
in der page.tpl.php
in der node.t... ich krieg nen Krampf in der Zunge beim Schreiben...
bezeichnet die $content nur das Haupt-Textfeld, in das du per
Wysiwyg-Editor oder was auch immer deine Inhalte eingibst.
Sozusagen die kleinste Einheit.
In der page.tpl.php bedeutet das $content hingegen, dass dort
das reinkommt, was vorher durch die node.tpl.php gethemed wurde.
Wenn man das einmal geschnackelt hat, wird es super einfach.
Das wird nur durch diverse if-Abfragen verschleiert, da in der page.tpl.php
wieder andere Sachen festgelegt werden können.
Drupal zwingt einen quasi, etwas PHP zu lernen. Wenn man das gar nicht will,
ist zu Template-Engines zu raten, die eine proprietäre Template-Sprache haben.
Das sieht dann zwar einfacher aus, aber dann muss man sich wieder mit den proprietären Tags rumschlagen.
Siehs mal so: es geht nicht ganz so schnell bei Drupal, aber wenn du es gerafft hast, geht es ab wie Opas Turborollstuhl...
Dabei sein ist alles
Nun, so hatte ich das auch
am 17.10.2007 - 15:31 Uhr
Nun, so hatte ich das auch verstanden, allerdings hatte ich bisher das Problem, dass $content in der node.tpl.php immer auch z.B. alle cck felder in einer art "Standard" Ausgabe mit ausgegeben haben.
Wollte ich z.B. ein CCK Feld vor dem Titel ausgeben lassen und wählte in der node.tpl.php folgenden (verinfachten) Aufbau:
CCK Feld
$title
$content
enthielt die Ausgabe von $content immer auch noch zusätzlich das cck feld.
Ich schließe daraus, dass $content vom drupal core generiert wird.
Machte ich aber folgendes:
ein Contemplate, dass nur die Textarea ausgibt (ohne cck felder usw.)
und dann node.tpl.php wie oben, habe ich, was ich will,
CCK Feld,
Titel
Text
Links
Daraus schließe ich, dass contemplate noch eine Ebene höher noch ansetzt.
Ich kenne das
am 17.10.2007 - 15:42 Uhr
Ich kenne das Contemplate-Modul nicht wirklich, aber zumindest im Node-Template wirft Dir $node->body alleine das Body-Feld aus.
CCK natürlich anders
am 17.10.2007 - 15:42 Uhr
Ich glaube, ich weiss was du meinst:
das Standard-body-Textfeld, das man scheinbar
nicht beeinflussen kann. Jaja, fiese Falle... ;)
Es gibt auf der Einstellungsseite zu deinem Content
Type eine Zeile für den Titel des body-Feldes.
Da steht dann drunter: wenn sie dieses Feld
leer lassen, wird das $body ausgeblendet.
So geht das. Einfach, aber gut versteckt.
Da ich das untere schon geschrieben hatte, bevor
ich deine Frage genau las, lass ich es jetzt drin,
Supportspam... ;)
Content Template arbeitet noch anders.
Du könntest den Bereich "affect Teaser" auch in der
page.tpl.php definieren mit irgendeinem Konstrukt if Teaser, dann show..
(bin mieser Programmierer)
Contemplate nimmt dir das nur ab.
Du kannst aber auch den kompletten Code aus der
"affect page" Abteilung rauskopieren und in deine node.tpl.php
reinkopieren. Da gibts dann nur noch die Anweisung,
<?php
if ($page == 0) {
?>
damit z.B. der Titel nur angezeigt wird, wenn der
Artikel in der Teaseransicht z.B. auf der
Startseite erscheint. Denn sonst hättest du in
der Komplettansicht des Nodes den Titel doppelt:
einmal aus der page.tpl.php und einmal aus der node.tpl.php
Klingt kompliziert - ist es auch. ;)
Nein, ist es eigentlich nicht.
Du hast grundsätzlich zwei Möglichkeiten, dich da reinzufuchsen:
Einmal der harte Weg (so habe ich es gemacht) über Tutorials
zum Themen von cck auf Drupal.org, wo du dich mit jedem einzelnen
gerenderten Element auseinandersetzt. Dauert länger, aber per Try
und error wird einem schliesslich klar, was der ganze Mist soll.
So hab ich es gemacht, weil ich damals weder CCK noch contemplate
gerafft und dann mit Flexinode gearbeitet habe.
Oder eben der komfortablere Weg über contemplate, allerdings
ist einem da die Logik unklar.
Aber so ist es doch eigentlich immer: entweder komfortabel
oder komplett anpassbar.
Dabei sein ist alles
Mal ein anderer Ansatz. Wenn
am 18.10.2007 - 10:21 Uhr
Mal ein anderer Ansatz.
Wenn du Contemplate benutzt überschreibst du die Ausgabe für eben diesen Ausgabetyp, also teaser, full oder rss. Das bedeutet, dass wirklich nur das ausgegebn wird, was du in dem Contemplate-Feld angegeben hast.
Leider gibt Contemplate nicht immer das vollständige "Original" aus. In dem Kasten daneben werden dir aber alle möglichen Variablen angezeigt, die dir zur Verfügung stehen. Ich kopiere mir den Inhalt immer in einen Editor und suche mir die Teile raus, die ich ausgeben möchte. Da gibt es immer verschiedene Ausführungen. Mal schon in HTML formatierte, aber auch noch "nackte" Ausgaben, die du dann neu mit HTML Markup versehen kannst.
@Jan, ja, genauso mache ich
am 25.10.2007 - 09:42 Uhr
@Jan,
ja, genauso mache ich es auch, ich möchte aber eigentlich nur wissen, welche Variablen ich wie (vorallem mit welchem html code) ich dort einfügen muss, um die Ausgabe exact so zu bekommen, wie drupal den node ausgeben würde, wenn ich contemplate nicht nutzen würde.
Das würde es einfacher machen, wenn man nur kleine Anpassungen an der Ausgabe vornehmen muss.