Wo finde ich den unformatierten Inhalt?
am 14.05.2009 - 14:35 Uhr in
Aloha,
ich versuche seit zwei Tagen mehr oder minder krampfhaft eine bestehende Seite in Drupal zu zwingen.
Mein bisheriges Wissen ueber Drupal beschraenkt sich hauptsaechlich auf ein paar Testinstallationen mit einigen zusaetzlich installierten Modulen. Sicherlich werde ich an der einen oder anderen Stelle die falsche Begrifflichkeit nutzen, fuer Korrekturen des Vokabulars bin ich auf alle Faelle empfaenglich. Ebenso duerft ihr mich gerne als Noob beschimpfen, ich bin hart im Nehmen. ;)
Installiert ist momentan Drupal 6.11 (6.12 werde ich spaeter draufschieben). Zusaetzlich ist noch CCK, Views und Devel in den aktuellen Versionen am Start. Views wuerde ich, falls nicht zur Problemloesung unbedingt benoetigt, gerne wieder deinstallieren.
Herausforderung:
Ich moechte/muss neue Inhaltstypen anlegen, die dann jeweils eine ganz eigene Darstellung bekommen sollen. Konkreter gesagt handelt es sich um neue Artikel, die aus mehreren Textbloecken bestehen, welche jeweils blockweise dargestellt werden muessen. Die einzelnen Bloecke muessen dann noch formatiert und "geschmueckt" werden.
Zuerst habe ich per CCK einen neuen Inhaltstyp (nennen wir ihn 'neuerinhalt') angelegt, dem habe ich dann eine neue Textarea verpasst, ich kann also einen Artikel mit zwei unabhaengigen Textbloecken anlegen. Als naechstes habe ich ein neues Theme angelegt. Ich habe mir die default node.tpl.php in mein Theme-Verzeichnis kopiert und dann in node-neuerinhalt.tpl.php umbenannt. Ich habe mir ein style.css in das Verzeichnis gepackt und auch die template.php hineinkopiert. Ausserdem habe ich mir die page-front.tpl.php angelegt und nach meinen Wuenschen angepasst. Bisher ist alles eitel Sonnenschein.
Nun wollte ich mich an das Anpassen des eigentlichen Nodes machen und da kommt der Frust auf. In der node-neuerinhalt.tpl.php steht die Variable $content zur Verfuegung, die mir allerdings in der angebotenen Version nicht wirklich hilft. Dort wurde schon von Drupal ein <p></p>
um den Inhalt gesetzt. Um den neuen Inhalt des CCK Felds wurden hingegen schon diverse Divs gebastelt. Ueber modules/cck/theme/content-field.tpl.php koennte man da regelnd eingreifen, man will es aber natuerlich auf keinen Fall an dieser Stelle machen. Aber wo ueberschreibe ich den generierten HTML Code von CCK? Waas ist der korrekte Override dafuer und wo muss er hineingepackt werden?
Ausserdem suche ich verzweifelt nach der richtigen Stelle an der Drupal $content generiert. Wie muss ein Override dafuer aussehen, damit ich Drupal mein eigenes Layout aufzwingen kann? Ich moechte nicht, dass der Inhalt in <p></p>
gesetzt wird. Ich haette am liebsten ein Array mit allen Feldern (Rohdaten) des Artikels. Im Prinzip einfach $node aber ohne die bereits erfolgten Formatierungen. In meintheme_markup() ist ja ebenfalls der Inhalt schon formatiert worden, zumindest finde ich in $element nirgendwo komplett unformatierte Inhalte. Egal wie ich mich der Sache naehere, ich komme praktisch immer "einen Schritt zu spaet".
Irgendwie muesste ich beim Aufbau des $content alle Felder/Variablen des Artikels abfragen und je nach Feld in entsprechende Divs verpacken. Ich wuerde mich freuen, wenn mir da jemand den korrekten Denkanstoss geben koennte. Wenn irgendwie moeglich ohne das AddOn Views zu bemuehen. Je mehr ich direkt in Code verpacken kann, desto besser.
Vielen Dank jetzt schon mal fuer das Lesen meines unsaeglichen Getippsels hier. ;)
- Anmelden oder Registrieren um Kommentare zu schreiben
Kennst du Contemplate? -
am 14.05.2009 - 14:52 Uhr
Kennst du Contemplate? - Damit bekommst du alles einzeln ... und ersetzt dann in deiner node-xxx.tpl.php den $content -> http://drupal.org/project/contemplate
-------------------------------------------------------------------------------
Drupal ist das "Coolste", was mir in 10 Jahren Webworking untergekommen ist!
Meine persönliche Drupal Spielwiese
Drupal 7 Screencasts in deutsch!
Vielen Dank fuer die Idee
am 14.05.2009 - 16:32 Uhr
Vielen Dank fuer die Idee Contemplate zu verwenden. Habe ich mir jetzt mal rasch installiert, angeschaut und fuer durchaus brauchbar befunden. Allerdings ist auch in Contemplate der "eigentliche" Text der Standardtextbox bereits mit einem
<p></p>
umgeben. Woher kommt das bloss?Und nein, es duerfte nicht vom Editor kommen, ich habe mal in der Tabelle node_revisions nahgeschaut, dort steht im Inhaltsfeld kein
<p>
dabei...Eingabeformat
am 14.05.2009 - 17:06 Uhr
Welches Eingabeformat wählst du? Ist unter Verwalten =› Einstellungen =› Eingabeformate konfigurierbar.
Wenn dort der "HTML-Korrektor" aktiviert ist, werden in Beiträgen automatisch "fehlerhaftes und zerhacktes" HTML korrigiert. Es werden dann z.B. auch Absätze gesetzt (
<p>...</p>
).Es ist "Filtered HTML"
am 14.05.2009 - 18:40 Uhr
Es ist "Filtered HTML" gesetzt, ansonsten steht aber auch nur "Full HTML" als Alternative zur Auswahl. So etwas wie Plain Text ist irgendwie nicht angeboten.
Was mich aber dennoch wundert ist die Tatsache, dass der abgespeicherte Text in der Tabelle x_node_revisions im Feld Body kein
<p></p>
gespeichert wurde. Ausserdem besteht der Inhalt des Feldes nur aus "linke box" ohne Anfuehrungszeichen. Kein Enter drin oder sonst etwas.Ich muss mal schauen ob ich da irgendwo "Plain Text" als Editor finde.
Eingabeformate
am 14.05.2009 - 19:31 Uhr
Es ist "Filtered HTML" gesetzt, ansonsten steht aber auch nur "Full HTML" als Alternative zur Auswahl. So etwas wie Plain Text ist irgendwie nicht angeboten
Wenn du "Filtered HTML" konfigurierst, dann erscheint der "HTML-Korrektor", dieser ist aktiviert und verursacht die zusätzlichen Formatierungen. Wenn du ihn ausschaltest erscheinen sie nicht mehr, dann musst du allerdings selber die Formatierungen setzen.
Verwalten > Einstellungen > Eingabeformate > Filtered HTML > konfigurieren
Die gleichen Einstellungen lassen sich auch unter "Full HTML" setzen.
langsam wird es hell
am 15.05.2009 - 12:34 Uhr
So, nun habe ich endlich durchschaut wie das ablaeuft. Es ist in der Tat eine der Eingabfiltervorgaben, in meinem speziellen Fall ist es der Zeilenumbruchkonverter. Somit waere das auch alles sehr einfach nachvollziehbar, verhielte sich Drupal entsprechend der Bezeichnung. Ein Eingabefilter, so vermutete ich, kommt waehrend der Eingabe (des Speicherns der Eingabe), zum Einsatz. Dem ist allerdings ueberhaupt nicht so; und das ist auch gut so! Diese Funktionalitaet ist so intelligent implementiert worden, dass sie bei der Ausgabe zum Einsatz kommt. Somit kann man auch im Nachhinein alle bereits erfassten Beitraege entsprechend ausgeben lassen.
Eigentlich waere es aber imho schlauer gewesen das Baby Ausgabefilter zu nennen, dann haette ich wahrscheinlich schon deutlich eher verstanden, warum sich das Alles entsprechend verhaelt.
Interessant waere allerdings tatsaechlich, welche Funktion in Drupal fuer die Modifizierung/Erstellung von
$node->content['body']['#value']
bei der Ausgabe zustaendig ist. In der theme_markup() ist es bereits geschehen, es muss also deutlich frueher passiert sein. Na ja, da ich mich erst seit kurzem intensiver mit Drupal beschaeftige, werde ich es noch frueher oder spaeter herausfinden, wenn hier nicht noch jemand mit der passenden Antwort kommen sollte. ;)