Zum Inhalt springen

Probleme mit dem Template

Erstellt am 25. April 2006 · 6 Antworten · letzte Antwort am 28. April 2006

Tags: Frage

sydios ·

Hi ...

ich habe mir das Buch "Praxiswissen TYPO3" gekauft und
auf Basis desen versucht meine eigene Typo Site zu bauen.

Nur bin ich jetzt auf ein Problem gestossen das ich nicht lösen kann.

Ich habe für den Content auch ein HTML Template erstellt.

Das klappt mit dem Inhalt "Normaler Text" auch super nur wenn ich Text mit Bild auswähle kommt das Bild zwar aber als Inhaltstext die Überschrift.

Unter http://pix2vote.de/index.php?id=24 kann man das sehen.

Ausserdem werden die css styles auch nicht angewendet.

hier auch noch der Typoscript Code

tmp < tt_content.text
tt_content.text >
lib.stdheader.10.2.fontTag = 
lib.stdheader.10.1.fontTag = 
lib.stdheader.wrap = 
lib.stdheader.10.stdWrap.wrap = 
lib.stdheader.textStyle >


tt_content.text = TEMPLATE
tt_content.text {
		 template = FILE
		 template.file = fileadmin/inhalt1.html
		 marks.HEADLINE =< lib.stdheader
		 marks.TEXT =< tmp.20
}

tmp2 < tt_content.textpic
tt_content.textpic >

tt_content.textpic = TEMPLATE
tt_content.textpic {
		    template = FILE
		    template.file = fileadmin/inhalt1.html
		    marks.HEADLINE =< lib.stdheader
		    marks.TEXT =< tmp2.20
		    20.text.maxW = 20
}

Vielen dank ...

basti79 ·

Ich find den Fehler so beim rüberblicken auch nicht, aber ich werd dir mal etwas navigationshilfe geben:

tt_content ist ein CASE, dessen Key "CType" wird. Also bestimmt der inhalt der Kinder von tt_content, was mit welchem Elementtyp passiert. Deinen Fehler mußt du also in tt_content.textpic suchen. Schauen wir uns das mal an:

tt_content.textpic = TEMPLATE

Du willst eine Template benutzen

tt_content.textpic {
                    template = FILE
                    template.file = fileadmin/inhalt1.html

und zwar diese.

                    marks.HEADLINE =< lib.stdheader

"HEADLINE" soll mit dem "üblichen" Kopf ersetzt werden, "lib.stdheader", was ich erstmal als Sinnvoll erachten würde

                    marks.TEXT =< tmp2.20
                    20.text.maxW = 20
}

Und TEXT soll mit dem ersetzt werden, was vorher unterstellterweise der Text des "textpic" war (tmp.20). Ich bezweifele im übrigen, dass maxW so funktionieren wird, m.W. funktioniert die Option nur bei bildern. Was du, denke ich, suchst ist "(stdWrap.)crop".

Nun zu deinem eigentlichen Problem:

Wie das Ergebnis anmutet, hängt im Einzelnen davon ab, was du in die Datenbank eingetragen hast. Deine Template sieht erstmal oberflächlich korrekt aus, und ich habe auch so keinen Fehler gefunden. Ich sehe auch dass auf deiner Website in der Überschrift "Text mit Bild Überschrift" steht. Was darauf hindeutet, dass du es in das Eingabefeld "Überschrift" geschrieben hast. Ich kann nicht erkennen, dass hier der "Inhaltstext als Überschrift" verwendet wurde. Was genau hast du in die Eingabefelder für die Überschrift und den Text geschrieben?

sydios ·

Danke erstmal ...

Aber nicht der Inhaltstext wird als Überschrift benutzt sondern
als Inhaltstext wird die Überschrift benutzt, man kann das auf der Site sehen
ist neben dem Bild und in schwarz deswegen ist es leicht zu übersehen.

Die CSS Styles funzen auch nicht.

basti79 ·

Ah. #angry#

Erstmal noch zu den CSS: du mußt die statische template "content (default)" durch die "CSS Styled Content" ersetzen (nicht dazuschreiben, oder sowas), dann kriegst du überall class=... in den HTML-code, und dann kriegst du das auch mit CSS formatiert.

Zu dem anderen Problem: Das Textpic ist recht kompliziert aufgebaut. Wenn wir mal in die "content (default)" gucken (in CSC recht ähnlich), steht da:

tt_content.textpic = COA
tt_content.textpic {
  10 = COA  
  10.if.value = 25
  10.if.isLessThan.field = imageorient
  10.10 = < lib.stdheader
    
  20  < styles.content.imgtext
  20.text.10 = COA
  20.text.10 {
    if.value = 24
    if.isGreaterThan.field = imageorient
    10 = < lib.stdheader
  }
  20.text.20 = < tt_content.text.20
}

Was erstmal ziemlich kompliziert ist. Auf jeden Fall hängt das alles irgendwie davon ab, welches Layout du für das Bild ausgewählt hast ("oben links im text" etc.). Gelegentlich kann dann auch in tt_content.textpic.20.text.10.10 ein header erzeugt werden, und der eigentliche text steht in tt_content.textpic.20.text.20.

Ich nehme an, dass die Antwort irgendwo da zu suchen ist.

Andere Alternative wäre, ein ganz eigenes RenderObj zu schreiben, was m.E. i.d.R. die sinnvollere Alternative ist - die vorgegebenen Templates sind einfach nur Kraut und Rüben.

sydios ·

eigentlich brauch ich nur 2 Elemente

Normaler Text und da eh nur 1 Layout
Und Text mit Bild da auch nur Bild links und Text rechts.

Ich versuch das mal ohne die Templates :-)

sydios ·

ich hab jetzt das standart template rausgemacht und
versucht mein eigenes zu schreiben.

tt_content  = TEMPLATE
tt_content  {
                     template = FILE
		     template.file = fileadmin/inhalt1.html
		     marks.HEADLINE = TEXT
                     marks.HEADLINE.field = header
		     marks.TEXT = TEXT
                     marks.TEXT.field = bodytext
                    }

Jetzt sind 2 Probleme aufgetaucht.

Bei dem Eintrag mit Bild wird jetzt zwar der richtige Bodytext angezeigt aber
dafür ohne Bild.

Bei dem Nur Text werden die Absätze im Text nicht erkannt und der Text steht in einer Zeile.

http://pix2vote.de/index.php?id=24

basti79 ·

Vorweg: wie aus dem Bild in der Datenbank eine URL gemacht wird, auf die der Browser zugreifen kann, und über die er sich das Bild abholen kann, ist mir nach wie vor unklar. Ich hab für solche Manöver bislang immer die vorgegebenen Systeme benutzt. Kann dir da also im Moment nicht weiterhelfen.

Zu den Umbrüchen:

Da ist sehr wohl ein Umbruch (CR+LF), in HTML heißt das jedoch genausoviel wie aller anderer Whitespace. Lange rede kurzer Sinn: da wo jetzt ein CR/LF ist, willst du einen HTML-Umbruch (<br />). Dazu ist wohl die Funktion split gut.

Wenn das renderObj (tt_content ist das default-renderObj für CONTENT-CObjekte die table=tt_content haben - alles klar? 😉 ) je nach Inhaltstyp andere reaktionen zeigen soll (beispielsweise bei "textpic" = "Text mit Bild" ein Bild dazupacken), mußt du wohl oder übel ein CASE-Objekt verwenden und dir die entsprechenden Contenttypen zusammenklamüsern.

Als Vorbild/Beispiel hier was von meiner Seite (das renderObj hier wird üblicherweise einfach von tt_content kopiert):

# textpic oder stirb
     renderObj = CASE
     renderObj.key.field = CType
     renderObj.textpic < tt_content.textpic

     renderObj.textpic.20.text.20.crop = 200 |  <a href="index.php?id={field:pid}">mehr...</a>  | 1
     renderObj.textpic.20.text.20.insertData = 1
     renderObj.textpic.20.maxW=70
     renderObj.textpic.20.maxH=70

     renderObj.default = HTML
     renderObj.default.value = <b>Erstes Inhaltsobjekt einer Buchvorstellung muß ein Text mit Bild sein</b>

     renderObj.stdWrap.wrap = <div class="linksblock"> | </div>

Hier wird also, wenn ein Text mit Bild vorliegt, dieses durch Klau des entsprechenden Ausschnitts aus tt_content angezeigt, und der Text etwas beschnitten und mit einem Link versehen, und ansonsten eine entsprechende Fehlermeldung ausgegeben.