Weniger ein Tutorial (weil keine umfangreiche Beschreibung), sondern mehr ein TypoScript Beispiel. Ich möchte euch einen umfangreichen PageBrowser vorstellen, welcher durch TypoScript generiert wird. Interessant für alle TypoScript Freaks 😉 Fragen könnt ihr in den Kommentaren stellen.
Achtung: Aufgrund der Benutzung von „expandList“ wird TYPO3 4.6 für dieses Beispiel benötigt.
Konstanten:
# Konfiguration tsContentBrowser.maxPerPage = 2 tsContentBrowser.pidInList = 42 tsContentBrowser.table = tt_content tsContentBrowser.where = colPos=0 tsContentBrowser.languageField = sys_language_uid tsContentBrowser.prePages = 3 |
Setup:
# In Extension ts_select bekannt machen als Content Element (Dropdown) plugin.tx_tsselect_pi1.objList.tsContentBrowser.title = Content Browser plugin.tx_tsselect_pi1.objList.tsContentBrowser.cObject = COA_INT plugin.tx_tsselect_pi1.objList.tsContentBrowser.cObject { # Werte berechnen und merken im Register 5 = LOAD_REGISTER 5 { # EintrÀge insgesamt zÀhlen counter.cObject = CONTENT counter.cObject { table = {$tsContentBrowser.table} wrap = | select { languageField = {$tsContentBrowser.languageField} pidInList = {$tsContentBrowser.pidInList} where = {$tsContentBrowser.where} selectFields = COUNT(*) AS counter } renderObj = TEXT renderObj.field = counter renderObj.wrap = | } # Aktuelle Position curPage.cObject = TEXT curPage.cObject { data = GP:page wrap = | override = 1 override.if.value = 1 override.if.isLessThan.data = GP:page } # Max Seitenzahlen maxPages.cObject = TEXT maxPages.cObject { stdWrap.dataWrap = ({register:counter}/{$tsContentBrowser.maxPerPage})+0.5 prioriCalc = intval } # Vorherige Seite prePage.cObject = COA prePage.cObject { # Nur anzeigen wenn größer als 1 10 = TEXT 10.stdWrap.dataWrap = {register:curPage}-1 10.prioriCalc = intval 10.if.value = 0 10.if.isGreaterThan.cObject = TEXT 10.if.isGreaterThan.cObject { stdWrap.dataWrap = {register:curPage}-1 prioriCalc = intval } # Nur anzeigen wenn kleiner als 1 20 = TEXT 20.value = 1 20.if.value = 1 20.if.isLessThan.cObject = TEXT 20.if.isLessThan.cObject { stdWrap.dataWrap = {register:curPage}-1 prioriCalc = intval } } # NÀchste Seite nxtPage.cObject = COA nxtPage.cObject { # Nur anzeigen wenn kleiner als maxPages 10 = TEXT 10.stdWrap.dataWrap = {register:curPage}+1 10.prioriCalc = intval 10.if.value.stdWrap.dataWrap = {register:maxPages}+1 10.if.value.prioriCalc = intval 10.if.isLessThan.cObject = TEXT 10.if.isLessThan.cObject { stdWrap.dataWrap = {register:curPage}+1 prioriCalc = intval } # Nur anzeigen wenn kleiner als maxPages 20 = TEXT 20.data = register:maxPages 20.wrap = | 20.if.value.data = register:maxPages 20.if.isGreaterThan.cObject = TEXT 20.if.isGreaterThan.cObject { stdWrap.dataWrap = {register:curPage}+1 prioriCalc = intval } } # Aktuelle Position errechnen curPos.cObject = TEXT curPos.cObject { stdWrap.dataWrap = ({register:curPage}-1)*{$tsContentBrowser.maxPerPage} prioriCalc = intval } forwPos.cObject = TEXT forwPos.cObject { stdWrap.dataWrap = {register:curPage}+{$tsContentBrowser.prePages} prioriCalc = intval } backPos.cObject = TEXT backPos.cObject { stdWrap.dataWrap = {register:curPage}-{$tsContentBrowser.prePages} prioriCalc = intval } } # END Register # EintrÀge gesamt anzeigen 10 = TEXT 10.value = Einträge gesamt. 10.dataWrap = {register:counter} |<br /> # Pagebrowser 20 = COA 20 { # Erste Seite 10 = TEXT 10 { value = First innerWrap = << | typolink.parameter { data = TSFE:id if.value = 1 if.isGreaterThan.data = register:curPage } typolink.additionalParams = &page=1 } # Platzhalter 15 = TEXT 15.value = # ZurÃŒck link machen 20 = TEXT 20 { value = Prev innerWrap = < | typolink.parameter { data = TSFE:id if.value = 1 if.isGreaterThan.data = register:curPage } typolink.additionalParams.cObject = COA typolink.additionalParams.cObject { 10 = TEXT 10.value = &page= 20 = TEXT 20.data = register:prePage } } # Platzhalter 25 = TEXT 25.value = # Seitenlinks machen 30 = COA 30 { 10 = TEXT 10.value = ... 10.noTrimWrap = || | 10.if.value = 1 10.if.isGreaterThan.data = register:backPos 20 = TEXT 20.stdWrap.cObject = TEXT 20.stdWrap.cObject.stdWrap.cObject = COA 20.stdWrap.cObject.stdWrap.cObject { 10 = TEXT 10.insertData = 1 10.value = {register:backPos}- 10.override = 1- 10.override.if.value = 1 10.override.if.isLessThan.data = register:backPos 20 = TEXT 20.insertData = 1 20.value = {register:forwPos} 20.override.data = register:maxPages 20.override.if.value.data = register:maxPages 20.override.if.isGreaterThan.data = register:forwPos } 20.stdWrap.cObject.expandList = 1 20.split { token = , cObjNum = 1 1 { 10 = TEXT 10 { current = 1 noTrimWrap = || | typolink.parameter { data = TSFE:id if.value.data = register:curPage if.equals.current = 1 if.negate = 1 } typolink.additionalParams.cObject = COA typolink.additionalParams.cObject { 10 = TEXT 10.value = &page= 20 = TEXT 20.current = 1 20.wrap = | } } } 2 < .1 2.noTrimWrap = | | | } 30 = TEXT 30.value = ... 30.noTrimWrap = || | 30.if.value.data = register:maxPages 30.if.isLessThan.data = register:forwPos } # Weiter Link 40 < .20 40.value = Next 40.innerWrap = | > 40.typolink.additionalParams.cObject.20.data = register:nxtPage 40.typolink.parameter.if > 40.typolink.parameter.if.value.data = register:maxPages 40.typolink.parameter.if.isLessThan.data = register:curPage # Platzhalter 45 < .15 # Letzte Seite 50 = TEXT 50 { value = Last innerWrap = | >> typolink.parameter { data = TSFE:id if.value.data = register:maxPages if.isLessThan.data = register:curPage } typolink.additionalParams.cObject = TEXT typolink.additionalParams.cObject { value = &page= dataWrap = |{register:maxPages} } } } # Platzhalter 25 = TEXT 25.value = <p>Seite {register:curPage} von {register:maxPages}</p> 25.insertData = 1 # Ausgabe des Inhalts 30 = CONTENT 30 { table = {$tsContentBrowser.table} wrap = | select { # SpracheinschrÀnkung auswÀhlen ÃŒber languageField = {$tsContentBrowser.languageField} # Aus welcher Seite, sonst current pidInList = {$tsContentBrowser.pidInList} # Die beiden haben leider kein stdWrap (lösung: siehe markers) begin = ###beginCount### max = {$tsContentBrowser.maxPerPage} # Where und andWhere halt where = {$tsContentBrowser.where} #andWhere = # Nur folgende Felder auswÀhlen #selectFields = header # SQL fÃŒr die Sortierung #orderBy = RAND() orderBy = sorting # Aber ÃŒber Marker kann man die sortierung beeinflussen markers { beginCount.data = register:curPos } } # Das rendern jedes einzelnen (in diesem fall standard typo3 config ÃŒbernehmen) renderObj < tt_content } # ZurÃŒcksetzen des Registers 35 = RESTORE_REGISTER } |