Zum Inhalt springen

Felder "wrapen"

Erstellt am 4. Dezember 2008 · 17 Antworten · letzte Antwort am 17. Dezember 2008

Tags: Frage

Naerys ·

Hallo zusammen,

ich habe da ein kleines Problemchen und hoffe mir kann jemand auf die Sprünge helfen. Arbeite noch nicht so lange mit Typo3 und vermute mal das mir vielleicht nur ein Befehl fehlt der mir als Anfänger noch nicht so geläufig ist.

Ich habe auf meiner Seite eine rechte Spalte aus der ich den Inhalt auslese. Der Inhalt soll in Blöcken dargestellt werden. Bisher lese ich den Inhalt wie folgt aus:

subparts.RIGHT_CONTENT = CONTENT
	subparts.RIGHT_CONTENT {
		table = tt_content
		select.orderBY = sorting
		select.where = ColPos = 2	
	}

Jetzt möchte ich das Feld Header mit <div class="info_block_ueberschrift">|</div> und das Feld Bodytext mit <div class="info_block">|</div> wrapen.
Ich hab schon ein paar Sachen ausprobiert. Aber das hat leider nicht geklappt.
Ich hoffe mir kann einer nen Schubs in die richtige Richtung geben.

Grüße
Heike

Naerys ·

Habe es jetzt nach einigem rumm probieren und suchen selber heraus gefunden.

subparts.RIGHT_CONTENT = CONTENT
	subparts.RIGHT_CONTENT {
		table = tt_content
		select.orderBY = sorting
		select.where = ColPos = 2
		
		renderObj = COA
 		renderObj{
			10 = TEXT
			10.field = header
			10.wrap = <div class="info_block_ueberschrift">|</div>
			
			20 = TEXT
			20.field = bodytext
			20.wrap = <div class="info_block">|</div>
		}
	}
Michaelh74 ·

Nur zur Info:
Damit werden vermutlich Deine Content-Elemente Text mit Bild etc. nicht mehr funktionieren. Bei reinen Text Elemente geht's aber auch so...

Gruß
Michael

Naerys ·

Hmmm... das ist natürlich etwas ärgerlich. Ich hab jetzt mal versucht das ganze in eine CASE-Abfrage zu packen. Aber irgendwie funktioniert das nicht. Kann man das so machen wie ich das gemacht hab, oder ist das ein total falscher Ansatz?

 		renderObj = CASE
 		renderObj {
 			key.field = CType
 			
 			text = COA
 			text {
 				10 = TEXT
 				10 = header
 				10.wrap = <div class="info_block_ueberschrift">|</div>
 			
 				20 = TEXT
 				20 = bodytext
 				20.wrap = <div class="info_block">|</div>
 			}
 			
 			textpic = COA
 			textpic {
 				10 = IMGTEXT
 				10 = header
 				10.wrap = <div class="info_block_ueberschrift">|</div>
 			
 				20 = IMGTEXT
 				20 = bodytext
 				20.wrap = <div class="info_block">|</div>
 			}
 			
 			image = COA
 			image {
 				10 = IMAGE
 				10 = header
 				10.wrap = <div class="info_block_ueberschrift">|</div>
 			
 				20 = IMAGE
 				20 = bodytext
 				20.wrap = <div class="info_block">|</div>
 			}
 			
 			default = COA
 			default {
 				10 = TEXT
 				10 = header
 				10.wrap = <div class="info_block_ueberschrift">|</div>
 			
 				20 = TEXT
 				20 = bodytext
 				20.wrap = <div class="info_block">|</div>
 			} 				
 			
		}
Michaelh74 ·

Das könnte so etwas kompliziert werden, da Du ja auch noch Dinge wie Header-Layout, Positionierung des Bildes etc. berücksichtigen müsstest.

Falls Du immer mit einer Überschrift arbeitest, könntest Du die Überschrift z.B. so wrappen (ungetestet):

lib.stdheader.10 = <div class="info_block_ueberschrift">|</div>
|<div class="info_block">|

Das schließende Div für Deinen Body-Bereich integrierst Du über den section frame "Rahmen" bzw. "Frame"

tt_content.stdWrap.innerWrap2 >
tt_content.stdWrap.innerWrap2 = |</div>

Dafür gibt es sicher noch andere Lösungen. Aber damit funktionieren wenigstens die T3 internen Content-Elemente weiterhin wie vorgesehen.

Gruß
Michael

Naerys ·

Das klappt leider nicht.. aber ist mit sicherheit auch noch falsch eingebunden

subparts.RIGHT_CONTENT = CONTENT
	subparts.RIGHT_CONTENT {
		table = tt_content
		select.orderBY = sorting
		select.where = ColPos = 2

		lib.stdheader.10 = <div class="info_block_ueberschrift">|</div>|<div class="info_block">| 
		tt_content.stdWrap.innerWrap2 >
		tt_content.stdWrap.innerWrap2 = |</div>
	}
DerRobert ·

hallo Heike,

Es gibt fertige includes bei typo3.

Wenn du bei deiner Root-Seite auf template gehst oben in der selectbox dann info/modify auswählst auf "click here to edit whole record" klickst kannst du irgendwo statics includen. Ich würde entweder css_styled_content oder content(default) einbinden.

Dann wird nämlich ein fertiger Code eingefügt den du dann im objektbrowser anpassen kannst wie du willst. (stichwort tt_content). Du wirst sehen in tt_content ist genau das CASE das du dir zusammengeschrieben hast bereits fertig und noch vieles mehr.

dazu musst du aber dein renderObj wieder auskommentieren / rauslöschen.

liebe Grüße
Robert

Michaelh74 ·

Also ich geh mal schwer davon aus, dass hier css_styled_content eingesetzt wird. Ist ja quasi Standard. Allerdings ist der Fall mit eigenem Header und separaten Body wrap schon ein Spezial-Fall den T3 nicht von Haus aus bietet.

Versuchs mal so:

subparts.RIGHT_CONTENT < styles.content.getRight

lib.stdheader.10.wrap = <div class="info_block_ueberschrift">|</div><div class="info_block">
tt_content.stdWrap.innerWrap2 >
tt_content.stdWrap.innerWrap2 = |</div>

Pro wrap nur eine Pipe "|" verwenden!

Wir überhaupt was davon bereits im Quelltext angezeigt?

Content müsste so passen, beim Header bin ich mir nicht ganz sicher...

Gruß
Michael

Naerys ·

Guten Morgen zusammen,

ja css_styled_content ist included.

der code von Michael hilft leider auch nicht weiter.

Wäre es überhaupt möglich das Layout von "LEFT" und "RIGHT" vernünftig zu wrapen?
Ich möchte im "LEFT_CONTENT" ein Layout für meine News haben und im "RIGHT_CONTENT" möchte ich ein anderes Layout für Blöcke haben in diesen ich dann ganz normal Text, Text mit Bild etc. verwenden kann.

subparts.LEFT_CONTENT = CONTENT
	subparts.LEFT_CONTENT {
		table = tt_content
		select.orderBY = sorting
		select.where = ColPos = 0
	}
	
	subparts.RIGHT_CONTENT = CONTENT
	subparts.RIGHT_CONTENT {
		table = tt_content
		select.orderBY = sorting
		select.where = ColPos = 2
        }
Michaelh74 ·

der code von Michael hilft leider auch nicht weiter

Geht's denn etwas präziser? Was geht nicht?

Ja das geht, aber das hat mit dem ursprünglichen Thema überhaupt nichts mehr zu tun.

Du hast Du in Deinem HTML Template sicher sowas in der Art:

<div id="content-left">...DeinSubpart...</div>
<div id="content-right">...DeinSubpart...</div>

Damit kannst Du doch per CSS wunderbar vererben:
z.B.

#content-left .deineClass { DeineAnweisung }
#content-right .deineClass { DeineAndereAnweisung }

Gruß
Michael

Naerys ·

Wenn ich den Code eingebe von Oben dann bekomme ich quasi gar kein Layout. Also nur den Standard mit einer riesigen Überschrift und dann in relativ normaler Größe den Text drunter. Also auch keine boxen um den Text drumm herum.

Das mit der CSS habe ich ja auch so. Aber das Problem ist eben das in dem "RIGHT_CONTENT" Subpart die einzelnen Inhaltselemente eben als Blöcke dargestellt werden sollen. Also nicht die komplette rechte Spalte.

Michaelh74 ·

Wenn ich den Code eingebe von Oben dann bekomme ich quasi gar kein Layout. Also nur den Standard mit einer riesigen Überschrift und dann in relativ normaler Größe den Text drunter. Also auch keine boxen um den Text drumm herum.

Also eine "riesige Überschrift" kommt doch sicher nicht eindach so ;-) Das sieht mir schwer nach ner h1 oder h2 ohne CSS Formatierung aus.

Was steht denn dort im Quelltext. Poste das doch bitte mal. Vielleicht hilft das weiter...

Gruß
Michael

Naerys ·
<div id="RIGHT_CONTENT">
	<!--  CONTENT ELEMENT, uid:59/text [begin] -->

		<a id="c59"></a>
		<!--  Header: [begin] -->
			<div class="csc-header csc-header-n1"><h1 class="csc-firstHeader">Test</h1><br /><img src="clear.gif" width="1" height="5" border="0" class="spacer-gif" alt="" title="" /><br /></div>
		<!--  Header: [end] -->
			
		<!--  Text: [begin] -->
			<p class="bodytext">Test rechts</p>
		<!--  Text: [end] -->
			
	<!--  CONTENT ELEMENT, uid:59/text [end] -->

		
	<!--  CONTENT ELEMENT, uid:61/text [begin] -->
		<a id="c61"></a>
		<!--  Header: [begin] -->
			<div class="csc-header csc-header-n2"><h1>Zweiter Test</h1><br /><img src="clear.gif" width="1" height="5" border="0" class="spacer-gif" alt="" title="" /><br /></div>
		<!--  Header: [end] -->
			
		<!--  Text: [begin] -->
			<p class="bodytext">Zweiter Test für rechte Spalte</p>
		<!--  Text: [end] -->

			
	<!--  CONTENT ELEMENT, uid:61/text [end] -->
		</div>

Das erscheint dann im Quelltext. Die Klassen sind nicht von mir. Mein Template enthält nur folgendes:

<div id="RIGHT_CONTENT">
				Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
			eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
			At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
			no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
			consetetur sadipscing.
		</div>
Michaelh74 ·

Der erst Anweisung hat in der Tat nicht gegriffen.

Hab das Ganze jetzt mal selbst getestet.

So würde es gehen:

# Content header:
lib.stdheader = COA
lib.stdheader {
  2 >
  3 >
  5 >
  10.1.fontTag = <h2>|</h2><div class="info_block">
  stdWrap.dataWrap = |
}

# Content Bodytext
tt_content.stdWrap.wrap = |</div>

Du kannst die Überschrift ruhig als h2 lassen und dies dann per CSS stylen.
Wichtig: Bei dieser Lösung benötigst Du immer eine Überschrift je Content-Element / Box.

Gruß
Michael

Naerys ·
subparts.RIGHT_CONTENT < styles.content.getRight
	# Content header:
	lib.stdheader = COA
	lib.stdheader {
  		2 >
  		3 >
  		5 >
  		10.1.fontTag = <h2>|</h2><div class="info_block">
  		stdWrap.dataWrap = |
	}

	# Content Bodytext
	tt_content.stdWrap.wrap = |</div>

So hab ich das nun eingefügt. Und immer noch das gleiche Ergebnis wie oben.

Michaelh74 ·

Dann läuft irgendetwas anderes bei Dir im System nicht rund.
Mich hat schon gewundert, dass bei Dir die alten clear.gifs im Quell-Code drin stehen.

Getestet in T3 4.1.7 und 4.2.3.
Nur rein css_styled_content ohne irgendwelchen Automaketemplate-Mist.

In dieser Konstellation klappt es so auf diesen Weg sicher ;-)

Gruß
Michael

Naerys ·

Habe jetzt eine Lösung gefunden die funktioniert und mit der ich einigermaßen zufrieden bin. Auch wenn ich so langsam das Gefühl hab das bei mir komplett was nicht stimmt.

tempright.wrap {
   stdWrap.outerWrap.stdWrap.prepend =  TEXT
   stdWrap.outerWrap.stdWrap.prepend.field= header
   stdWrap.outerWrap.stdWrap.prepend.wrap = <div class="info_block_ueberschrift">|</div>
   stdWrap.wrap = <div class="info_block">|</div>
}

subparts.RIGHT_CONTENT = CONTENT
	subparts.RIGHT_CONTENT {
		table = tt_content
		select.orderBY = sorting
		select.where = ColPos = 2
		
		renderObj < tempright.wrap
	}