Zum Inhalt springen

Content elemente nummerieren

Erstellt am 19. Januar 2010 · 7 Antworten · letzte Antwort am 21. Januar 2010

Tags: Frage

mario p ·

Hallo,

es ist schon eine weile her seitdem ich das letzte mal um eure hilfe bitten musste, aber ich bin mal wieder an einen punkt gekommen, an dem ich einfach nicht weiter komme.

Meine seite besteht aus lediglich einer seite, in die ich content elemente per insert record einbinde und aufliste.

Diese elemente bekommen je nach seite von der sie kommen (bzw welches header-layout ausgewählt ist) verschiedene header die die kategorien symbolisieren(3 stück).

die header bau ich mit gifbuilder.
momentan schreibe ich vor alle header die uid des elements in der kategoriefarbe.

Header1 = IMAGE
Header1 {
	file = GIFBUILDER
	file {
		XY = 500,55
		transparentColor = #000000
		backColor = #000000
		10 = TEXT
		10.insertData = 1
		10.text.dataWrap = {field:uid}
		10.fontSize = 52
		10.offset = 0,40
		10.fontFile = fileadmin/templates/Tahoma_Bold.ttf
		10.fontColor = #FFFFFF
		10.niceText = 0
		10.antiAlias = 1

		20 = TEXT
		20.text.field = title
		20.text.current = 1
		20.fontSize = 38
		20.offset = 73,41
		20.fontFile = fileadmin/templates/Tahoma_Bold.ttf
		20.fontColor = #FFFFFF
		20.niceText = 0
		20.antiAlias = 1
		}
}
lib.stdheader.10.22 < Header1
lib.stdheader.10.22.file.10.fontColor = #F29700
lib.stdheader.10.23 < Header1
lib.stdheader.10.23.file.10.fontColor = #2E2F2D
lib.stdheader.10.24 < Header1
lib.stdheader.10.24.file.10.fontColor = #1E7F82

Statt der uid würde ich nun die elemente einfach mit laufenden nummern versehen, je nach kategorie mit einer zahl davor.
also
Kategorie1: 10, 11, 12, 13, ..., 110,111 etc.
Kategorie2: 20, 21, 22, 23, ..., 210,211 etc.
Kategorie3: 30, 31, 32 ...

sicher muss ich dafür die letztendliche zahl aus der kategorienummer und der laufenden nummerierung zusammensetzen.
ich bin mir nicht sicher ob man das mit TS überhaupt so einfach hinbekommt oder ob ein php notwendig wird.

ich hab keine ahnung :o ... hoffe ihr habt sie ... für einen wink wäre ich sehr dankbar

Dank und Gruß
Mario

mario p ·

Hallo Julian,

danke!!! für deine Antwort, ...wrap=|+1 ist mir neu, wieder was gelernt!

Ich kann die lösung nun schon riechen, leider aber nicht richtig niederschreiben.
mein TS sieht nun so aus:

Header3 = COA
Header3 {
	10 = LOAD_REGISTER
	10.H3Counter = 0
  	10.H3Counter.cObject = TEXT
  	10.H3Counter.cObject.data = register:H3Counter
  	10.H3Counter.cObject.wrap = |+1
  	10.H3Counter.cObject.if.isTrue.current = 1
  	10.H3Counter.prioriCalc = intval
  	
	20 = IMAGE
	20{
	file = GIFBUILDER
	file {
		XY = 500,55
		transparentColor = #000000
		backColor = #000000
		
		10 = TEXT
		10.insertData = 1
		#10.current = 1
		10.text.dataWrap = {register:H3Counter}
		10.fontSize = 52
		10.offset = 0,40
		10.fontFile = fileadmin/templates/Tahoma_Bold.ttf
		10.fontColor = #FFFFFF
		10.niceText = 0
		10.antiAlias = 1

		20 = TEXT
		20.text.field = title
		20.text.current = 1
		20.fontSize = 38
		20.offset = 73,41
		20.fontFile = fileadmin/templates/Tahoma_Bold.ttf
		20.fontColor = #FFFFFF
		20.niceText = 0
		20.antiAlias = 1
		}
	}

}

Das funktioniert ganz gut, leider stehen da überall nur 1sen, was sicher daran liegt, dass der letztendliche inhalt auf der hauptseite per:

listing = CONTENT
		listing {
			table = tt_content
			select {
				pidInList = 11,12,13
				orderBy = rand()
				where = colPos= 1
			} 
			renderObj.stdWrap.wrap =|</div></div>   
			}

eingefügt wird (das mit insterRecords war falsch formuliert, damit baue ich nur die einzelnen inhaltselemte zusammen da diese aus diversen content-typen/plugins bestehen).

Ich hab jetzt schon auf alle möglichen arten versucht dem cObject zu sagen das er die contentelemente einer bestimmten seite und spalte zählt(source etc gehen ja nicht beim typ TEXT).

Raus kamen bis jetzt nur "00000" (es gibt 5 c-elemente=5 Nullen) oder "+1" oder "0+1" oder "gar nix" :o

Also wie bring ich dem cObject vom typ TEXT bei auf der pidInList 13 in colPos 1 zu zählen?

Viele Grüße
Mario

mario p ·

HAHA!

Nach ner tasse earl grey bin ich fast am ziel, hatte zwar schon mit dem renderObj rumprobiert, aber noch ein neues cObj auf zu machen hatt ich bis jetzt noch nicht im sinn.

So gehts (fast):

Header3 = COA
Header3 {
	10 = LOAD_REGISTER
	#10.H3Counter = 0
  	#10.H3Counter.cObject = TEXT
  	#10.H3Counter.cObject.data = register:H3Counter
  	#10.H3Counter.cObject.wrap = |+1
  	#10.H3Counter.cObject.if.isTrue.current = 1
  	#10.H3Counter.prioriCalc = intval
  	
  	10.H3Counter.cObject = CONTENT
	10.H3Counter.cObject {
			table = tt_content
			select.pidInList = 11
			select.where = colPos = 0
			 renderObj = LOAD_REGISTER
			 renderObj {
    				H1Counter.cObject = TEXT
   				H1Counter.cObject.data = register:H1Counter
  				H1Counter.cObject.wrap = |+1
  				H1Counter.prioriCalc = intval
  				  				}
			}

	20 = IMAGE
	20{
	file = GIFBUILDER
	file {
		XY = 500,55
		transparentColor = #000000
		backColor = #000000
		
		10 = TEXT
		10.insertData = 1
		10.text.dataWrap = 3{register:H1Counter}
		10.fontSize = 52
		10.offset = 0,40
		10.fontFile = fileadmin/templates/Tahoma_Bold.ttf
		10.fontColor = #FFFFFF
		10.niceText = 0
		10.antiAlias = 1

		20 = TEXT
		20.text.field = title
		20.text.current = 1
		20.fontSize = 38
		20.offset = 73,41
		20.fontFile = fileadmin/templates/Tahoma_Bold.ttf
		20.fontColor = #FFFFFF
		20.niceText = 0
		20.antiAlias = 1
		}
	}

}

Nur noch ein problem: die null, wie schaffe ich's den wert auch dann auszugeben wenn er null ist? eigentlich ist doch nur required=1 auch für nullen empfänglich; aber wohin nur damit, mit ifEmpty hab ich es nicht hinbekommen...

Dank und Gruß
Mario

igorshmigor ·

Das sieht irgendwie vielzu kompliziert aus. Ich glaube Du warst davor schon auf dem richtigen Weg mit dem ersten Script. Bleib mal bei dem alten und kommentiere nur die vierte Zeile aus:

10.H3Counter = 0

Da setzt Du den Counter nämlich jedesmal wieder auf Null, so dass Du nur einsen als Ergebnis der Berechnung erhalten kannst.

Vielleicht auch Zeile 8 auskommentieren

10.H3Counter.cObject.if.isTrue.current = 1

Da ist mir nämlich nicht so ganz klar wozu das gut ist.

mario p ·

Naja auch mit:

        10 = LOAD_REGISTER
        10.H3Counter.cObject = TEXT
        10.H3Counter.cObject.data = register:H3Counter
        10.H3Counter.cObject.wrap = |+1
        10.H3Counter.prioriCalc = intval

hab ich es schon versucht, so bekomm ich nur 1sen, ich glaube das es daran liegt, dass auf der Seite auf der letzten endes alles gerendert wird gar kein content liegt. Das wird alles per TS (aus inhalten anderer seiten) zusammengebaut.
Deshalb muss ich ihm ja klar machen, wo er zählen soll, daher:

10 = LOAD_REGISTER
10.H3Counter.cObject = CONTENT
10.H3Counter.cObject {
                     #WO ZÄHLEN
                        table = tt_content
                        select.pidInList = 11
                        select.where = colPos = 0
                     #ZÄHLEN
                        renderObj = LOAD_REGISTER
                        renderObj {
                        H1Counter.cObject = TEXT
                        H1Counter.cObject.data = register:H1Counter
                        H1Counter.cObject.wrap = |+1
                        H1Counter.prioriCalc = intval
                                            }
                        }

Das funktioniert dann auch, nur leider steht vor dem Element mit der Zahl 0 keine 0, sondern nix, beim nächsten element steht dann die 1, dann die 2...

An sich geht es also, wenn es einfacher geht - ich bin für alles offen!
Nur die ausgabe der Null als 0 ist noch ein problem.

Viele Grüße
Mario

igorshmigor ·

Ich glaube, der Grund warum der erste Lösungsansatz nicht funktionierte liegt in den Zeilen 237 und 238 der Konfiguration im Static Template von CSS Styled Content (TYPO3 Version 4.3.1):

98 = RESTORE_REGISTER
99 = RESTORE_REGISTER

Damit werden immer die letzten zwei Änderungen am Register-Stack rückgängig gemacht. Dein Umweg über ein zusätzliches CONTENT-Objekt mit renderObj bewirkt wahrscheinlich, dass man zwei (oder mehr) zusätzliche Schritte im Register vor geht und deshalb auch wieder woanders landet, wenn die letzten zwei Schritte rückgängig gemacht werden. Was passiert bei deiner aktuellen Konfiguration, wenn Du auf der Seite mit der ID=11 zusätzliche Content-Elemente anlegst? Erhöht sich dann der Wert des Counters? Das würde ich jedenfalls erwarten.
Ansonsten versuch noch mal die erste Variante und füge ganz oben (oberhalb von Header3 = COA) folgendes ein:

lib.stdheader.98>
lib.stdheader.99>
mario p ·

Danke!!!

Das wars, soweit hab ich mich bis jetzt noch nicht in das static template gegraben als das ich sowas wissen könnte. Aber genau das war der punkt!

In der konfig mit extra renderobj hat sich beim erstellen eines neuen elements nicht der counter erhöht, sondern die startzahl des counters, der fing nach einigen test elementen dann bei 3 an hoch zu zählen, die letzten beiden elemente waren beide 5 - ungut.

Also für alle dies mal brauchen, so gehts:

#WICHTIG!
   lib.stdheader.98>
   lib.stdheader.99>

Header3 = COA
Header3 {
   #ZÄHLEN
	10 = LOAD_REGISTER
  	10.H3Counter.cObject = TEXT
  	10.H3Counter.cObject.data = register:H3Counter
  	10.H3Counter.cObject.wrap = |+1
  	10.H3Counter.prioriCalc = intval
   #AUSGABE DER ZAHL - GIFBUILDER
	20 = IMAGE
	20{
	file = GIFBUILDER
	file {
		XY = 500,55
		transparentColor = #000000
		backColor = #000000
		
		10 = TEXT
		10.insertData = 1
		10.text.dataWrap = 3{register:H3Counter}
		10.fontSize = 52
		10.offset = 0,40
		10.fontFile = fileadmin/templates/Tahoma_Bold.ttf
		10.fontColor = #FFFFFF
		10.niceText = 0
		10.antiAlias = 1
   #AUSGABE DES HEADERS - GIFBUILDER
		20 = TEXT
		20.text.field = title
		20.text.current = 1
		20.fontSize = 38
		20.offset = 73,41
		20.fontFile = fileadmin/templates/Tahoma_Bold.ttf
		20.fontColor = #FFFFFF
		20.niceText = 0
		20.antiAlias = 1
		}
	}

}

Der counter beginnt bei 1, also kein Null problem 😉

Super, Vielen Dank! Damit betrachte ich das Thema als gelöst.
Viele Grüße
Mario