Zum Inhalt springen

erste Überschrift eines Inhaltselements als H1 sonst H2

Erstellt am 26. April 2011 · 9 Antworten · letzte Antwort am 29. November 2012

Tags: Inhaltselemente, SEO, Frage

Unbekannter Benutzer ·

Hallo alle,

ich möchte, dass die Überschrift das jeweils ersten Inhaltselements einer Seite als H1-Tag dargestellt wird. Alle Überschriften der folgenden Inhaltslemente derselben Seite sollen dann als H2-Tag dargestellt werden.
Im Moment werden alle als H2 dargestellt.

Wie stelle ich das an?

Danke für Eure Hilfe & Gruß von
Thomas

igorshmigor ·

Sieht aber nach keiner schönen Lösung aus. Damit gehen ja alle Einstellungen aus CSS Styled Content verloren, lib.stdheader etc. ...
Nimm lieber das hier:

lib.stdheader.10.2{
  override.cObject=TEXT
  override.cObject{
    current=1
    insertData=1
    fontTag=<h1{register:headerStyle}{register:headerClass}>|</h1>
    if.value=1
    if.equals.data = cObj:parentRecordNumber
  }
}

Als Standard-Header legst Du im Constant-Editor H2 fest,
oder Du schreibst direkt in den Konstanten:

content.defaultHeaderType = 2

Damit werden alle Überschriften als H2 gerendert, die erste als H1, und sonst ändert sich nix.

Julian.​Hofmann ·

Da stimm ich Dir zu, Deine Variante sieht für den speziellen Fall auf alle Fälle eleganter aus.

Bei typo3wizard ist das "schmutziger", dafür aber sehr allgemein gültig. Mit deren Schnipsel ließe sich z.B. das 1. CE auch im Template ganz woanders hinplatzieren odgl. - zumindest liefert es dazu den Ansatz.

Unbekannter Benutzer ·

Hallo,

Danke für beide Antworten!
Mit der ersten Lösung hatte ich auch starke Bedenken aber die zweite ist wirklich klasse, besten Dank für alle Tipps.

Grüße von
Thomas

Unbekannter Benutzer ·

Hallo Huaba,

bei mir sieht das inzwischen so aus:

temp.stdheader < lib.stdheader
lib.stdheader >
temp.stdheader = COA
temp.stdheader {
  10=TEXT
  10 {
    field=header
    wrap=<h1>|</h1>
    if.value=1
    if.equals.data = cObj:parentRecordNumber
    required=1
  }
  20<.10
  20.if.negate = 1
  20.wrap=<h2>|</h2>
}
lib.stdheader < temp.stdheader

Grüße von
Thomas

Unbekannter Benutzer ·

So, da ich eh eine Lösung brauchte, in der zusätzlich auch noch die Spalte beachtet wird, hier nun meine Lösung:

lib.stdheader.10.2 >

# Headline styling depends on colPos
lib.stdheader.10.2 = CASE
lib.stdheader.10.2 {
	key.field = colPos
	insertData = 1
	# headlines for main
	0 = CASE
	0 {
		insertData = 1
		key.data = cObj:parentRecordNumber
		# styling vor all headlines
		default = TEXT
		default {
			current = 1
			dataWrap = <h2{register:headerStyle}{register:headerClass}>|</h2>
		}
		# styling only for the first headline
		1 = TEXT
		1 {
			current = 1
			dataWrap = <h1{register:headerStyle}{register:headerClass}>|</h1>
		}
	}
	#headlines for right
	2 = CASE
	2 {
		insertData = 1
		key.data = cObj:parentRecordNumber
		# styling vor all headlines
		default = TEXT
		default {
			current = 1
			dataWrap = <h5{register:headerStyle}{register:headerClass}>|</h5>
		}
		# styling only for the first headline
		1 = TEXT
		1 {
			current = 1
			dataWrap = <h4{register:headerStyle}{register:headerClass}>|</h4>
		}
	}
}

Huaba

Unbekannter Benutzer ·

Und mit diesem TS klappte das ganze sogar noch mit gridelements:

lib.stdheader.10.2 >

# Headline styling depends on colPos
lib.stdheader.10.2 = CASE
lib.stdheader.10.2 {
	insertData = 1
	key.field = colPos

	# default settings for all colPos
	default = CASE
	default {
		insertData = 1
		key.data = cObj:parentRecordNumber
		# styling vor all headlines
		default = CASE
		default {
			insertData = 1
			key.field = tx_gridelements_columns
			# styling for headlines in all normal columns
			default = TEXT
			default {
				current = 1
				dataWrap = <h2{register:headerStyle}{register:headerClass}>|</h2>
			}
			### styling for headlines in gridelements
			# headlines for gridelement box left (ID of gridelement column)
			100 = TEXT
			100 {
				current = 1
				dataWrap = <h4{register:headerStyle}{register:headerClass}>|</h4>
			}
			#headlines for gridelement box right (ID of gridelement column)
			101 < .100
		}
		# styling only for the first headline in normal columns
		1 = TEXT
		1 {
			current = 1
			dataWrap = <h1{register:headerStyle}{register:headerClass}>|</h1>
		}
	}

	# headlines for main (colPos 0)
	0 = CASE
	0 {
		insertData = 1
		key.data = cObj:parentRecordNumber
		# styling vor all headlines
		default = TEXT
		default {
			current = 1
			dataWrap = <h2{register:headerStyle}{register:headerClass}>|</h2>
		}
		# styling only for the first headline
		1 = TEXT
		1 {
			current = 1
			dataWrap = <h1{register:headerStyle}{register:headerClass}>|</h1>
		}
	}

	#headlines for right (colPos 2)
	2 = CASE
	2 {
		insertData = 1
		key.data = cObj:parentRecordNumber
		# styling vor all headlines
		default = TEXT
		default {
			current = 1
			dataWrap = <h5{register:headerStyle}{register:headerClass}>|</h5>
		}
		# styling only for the first headline
		1 = TEXT
		1 {
			current = 1
			dataWrap = <h4{register:headerStyle}{register:headerClass}>|</h4>
		}
	}
}
vburg ·

Das funktioniert im Prinzip super, aber es überschreibt leider das Header-Layout, auch wenn dort explizit ein anderer Wert als "Standard" zugewiesen wurde. Kann man es so ergänzen, dass die Automatik nur bei "Standard" dann läuft?