Zum Inhalt springen

Spaltenabhängige Wraps

Erstellt am 18. Dezember 2007 · 7 Antworten · letzte Antwort am 15. Februar 2008

Tags: Inhaltselemente, Frage

Blurry ·

Hi,

ich suche jetzt schon seit Tagen erfolglos nach einer Lösung für dieses Problem. Ich habe für meine rechte Spalte zwei CSS-Klassen, eine für die Überschrift, eine für den Inhalt. Nun muss ich irgendwie dafür sorgen, dass in der rechten Spalte eingefügte Datensätze korrekt mit diesen Klassen versehen werden. Als ich folgenden Code-Schnipsel fand, habe ich mich leider etwas zu früh gefreut:

#  subparts.RAND {
  renderObj = COA
  renderObj {
    10 = TEXT
    10.field = header
    10.wrap = <div class="rand_ueberschrift"> | </div>
    20 = TEXT
    20.field = bodytext
    20.wrap = <div class="rand_inhalt"> | </div>
  }
}

Das funktioniert gut, aber nur dann, wenn ich standardmäßigen Inhalt einfüge. Benutze ich etwa "Datensatz einfügen", wird nichts angezeigt. Kein Wunder, bodytext ist in dem Fall in der Datenbanktabelle ja auch leer.

Ich müsste es nun irgendwie hinbekommen, dass Obiges zumindest mit "Datensatz einfügen", viel wichtiger aber auch mit "Plugin einfügen" (tt_news in diesem Fall) funktioniert. Das tt_news-Template für die Anzeige der "Latest"-Datensätze (die sollen an die Stelle) habe ich schon so umgeschrieben, dass es für die gewünschte Darstellung sorgt; damit müsste man in diesem Fall also gar dafür sorgen, dass einfach nichts getan wird, wenn es sich beim Inhalt um tt_news-Kram handelt. Geht das vielleicht irgendwie mit CASE oder so?

So langsam verzweifle ich an dem Kram. Hat jemand eventuell irgendeinen Ansatz? Ich kann mir kaum vorstellen, dass ich der Einzige mit dem Problem bin.

Blurry ·

Keine schlechte Idee im Grunde. Geht aber leider nicht, da es vermutlich schon ein DIV sein muss, was die Überschrift umschließt. Das Ding bekommt nämlich eine fixe Länge und Hintergrundfarbe verpasst. Zumindest die Länge kann ich einer h1-Überschrift leider nicht zuweisen. Um zu verdeutlichen, was ich meine:

Bild: abload.de/…/h1yatf.gif

Hugisan ·

Du kannst doch auch einer Überschrift eine fixe Länge zuweisen.

h1{
width: 300px;
}

oder versteh ich etwas falsch?

PhoenixAusDerAsche ·

Wenn du das für die tt_news brauchst:

Ändere doch die entsprechenden Templates der tt_news ab. Setze dort ein div um den Marker und tt_news sollte es entsprechend ausgeben. Dann noch die CSS darauf angepasst.

Gruß
phoenix

Blurry ·
PhoenixAusDerAsche schrieb

Wenn du das für die tt_news brauchst:

Ändere doch die entsprechenden Templates der tt_news ab. Setze dort ein div um den Marker und tt_news sollte es entsprechend ausgeben. Dann noch die CSS darauf angepasst.

Hi,

das hatte ich ja sogar schon gemacht (siehe Eingangsposting). Aber leider soll in der Spalte auch aller möglicher anderer Content auftauchen. Mittlerweile habe ich eine allgemeingültige Lösung, denn ...

Hugisan schrieb

Du kannst doch auch einer Überschrift eine fixe Länge zuweisen.

h1{
width: 300px;
}

oder versteh ich etwas falsch?

... das funktioniert ja tatsächlich! Bei meinem Test gestern ließ sich h1 bloß deswegen keine fixe Breite zuweisen, weil das Element aufgrund einer Anweisung anderswo inline gesetzt war. Mit der Extra-CSS-Formatierung nur für den Rand funktioniert es nun also trotz der etwas speziellen Anforderungen gut.

Daher noch mal danke an alle, die hier geantwortet haben. Falls mir jemand sagen kann, ob der ursprünglich verfolgte Ansatz über TypoScript auch zum Erfolg führen könnte, hätte ich da übrigens allein aus Gründen des Verständnisses nichts gegen einzuwenden.

ChevChelios ·

Hi Blurry,

in TypoScript könnte ich mir folgenden Ansatz für spaltenabhängige Wraps vorstellen. Gehen wir mal davon aus du möchtest das reguläre Textelement sowohl in der Normal, als auch in der Rechts Spalte benutzen, aber beide Textelemente müssen unterschiedlich formatiert bzw. gewrappt werden und das Ganze lässt sich aus bestimmten Gründen nicht elegant per CSS lösen, sondern es müssen komplett andere Klassen verwendet werden.

temp.tt_content_text < tt_content.text

tt_content.text >
tt_content.text = CASE
tt_content.text {
	
	0 < temp.tt_content_text
	0.20 {
		wrap = <div class="klasseNormal">|</div> #klasse für normal spalte
	}
	
	2 < temp.tt_content_text
	2{
		stdWrap.wrap = <div class="relatedWrap">|</div> #zusätzlicher wrap für jedes element im related content

		# Headline auf einen bestimmtes Layout fixieren
		10.10 < lib.stdheader.10.1

		20 {
			wrap = <div class="klasseRechts">|</div> #klasse für rechte spalte
		}
	}
	
	# Feld für Case definieren
	key.field = colPos

Du änderst quasi einfach das tt_content.text Element in ein CASE Objekt statt ein COA und kopierst vorher das gesamt Element in ein temp Objekt in diesem Falle temp.tt_content_text.

Die Objekte "0" und "2" stehen für die Spalten also colPos Nummern. Die "0" ist die Normal Spalte und die "2" die rechte Spalte. Je nachdem aus welcher Spalte ein Inhalt kommt sucht sich das TypoScript beim Rendern der Seite die passenden Anweisungen raus. Im Beispiel für "0" wird der bodytext mit <div class="klasseNormal">|</div> gewrappt bei "2" allerdings mit <div class="klasseRechts">|</div>. Zusätzlich habe ich im Beispiel das gesamte Textelement der rechten Spalte, also auch die Headline mit einem <div class="relatedWrap">|</div> gewrappt. Man hat also komplett freie Hand wie ein Element spaltenabhängig formatiert werden soll.

Somit kannste also ganz simpel einem Contentelement verschiedene Zustände und Klassen zuweisen und ein Redakteur müsste immer nur eben ein und dasselbe Textelement einsetzen, dass du allerdings spaltenabhängig formatiert hast. Die selbe Prozedur kannst Du dann auch selbstverständlich für jedes weitere Contentelement durchführen. Hoffe das war was Du meintest ;-)

Gruß,
Alex

Blurry ·

Hallo, ChevChelios,

danke für deine Ausführungen. Habe das jetzt noch nicht ausprobiert, aber der Ansatz ist ja tatsächlich mal ein ganz anderer als der in meinem Eröffnungsposting. Sieht vielversprechend aus.

Ich glaube, ich werde TypoScript nie wirklich verstehen. Ist irgendwie ein Buch mit sieben Siegeln für mich. Stoße ich in einem zu schreibenden Programm auf ein Problem, ist es mir meist möglich, irgendwie selbst eine Lösung zu finden. Aber die "PHP-Array-Befüllsprache" TypoScript, die raffe ich nicht. Bei dem Thema muss ich wirklich jedes Mal Google anschmeißen, schon komisch.

MfG
Blurry