TYPO3 6.x Kategorien auslesen und verwenden
Mit der TYPO3 6.x gab es einen neuen Tab „Kategorien“ /category für die Seiteneigenschaften (pages) und für die Datensätze (tt_content). Ihr könnt nun z.B. auf der root Seite (ID=1) im List-Modus neue Kategorien anlegen und verwalten.
In den Seiteneigenschaften könnt Ihr nun die angelegten Kategorien auswählen!
Unter „Spezial-Menüs “ gibt es auch neue Menüs für die Kategorie-Ausgabe! Auch das HMENU hat nun einen neuen special erhalten = categories! Hier könnt Ihr dann ein Menü mit den Kategorien aufbauen.
Das special-Menü baut sich in etwa so auf:
# Menu of categorized pages categorized_pages < .default categorized_pages { special = categories special.value.field = selected_categories special.relation.field = category_field special.sorting = title special.order = asc stdWrap { outerWrap = <ul>|</ul> } } # Menu of categorized content elements categorized_content = RECORDS categorized_content { categories.field = selected_categories categories.relation.field = category_field tables = tt_content conf.tt_content = TEXT conf.tt_content { field = header typolink.parameter = {field:pid}#{field:uid} typolink.parameter.insertData = 1 wrap = <li>|</li> } wrap = <ul>|</ul> }
Was ich noch benötigt habe, ist eine Ausgabe, für die ausgewählte Kategorie! Hier dazu das passende typoscript:
#kategorie auslesen 10 = CONTENT 10 { wrap = <p>|</p> table = pages select { uidInList.field = uid #root ID - Kats abgespeichert <strong>pidInList = 1</strong> selectFields = sys_category.title join = sys_category_record_mm ON pages.uid = sys_category_record_mm.uid_foreign JOIN sys_category ON sys_category.uid = sys_category_record_mm.uid_local where = sys_category_record_mm.tablenames = 'pages' orderBy = sys_category.sorting } renderObj = TEXT renderObj { field = title wrap = | } }
Hier ein weiteres Beispiel mit sys_category und das auslesen einer Kategorie in Verbindung mit Bootstrap col´s
lib.pageCategories = CONTENT lib.pageCategories { table = sys_category select { languageField = sys_language_uid pidInList = 16 selectFields = sys_category.title join = sys_category_record_mm ON sys_category.uid = sys_category_record_mm.uid_local where = sys_category_record_mm.tablenames = "pages" AND sys_category.parent = 1 andWhere.field = uid andWhere.intval = 1 andWhere.wrap = sys_category_record_mm.uid_foreign=| orderBy = sys_category.sorting max = 1 } renderObj = CASE renderObj { key.field = uid 2 = TEXT 2.value = col-sm-6 col-md-6 3 = TEXT 3.value = col-sm-3 col-md-3 4 = TEXT 4.value = col-sm-3 col-md-3 no-image default = TEXT default.value = col-sm-3 col-md-3 } stdWrap.ifEmpty.cObject = TEXT stdWrap.ifEmpty.cObject.value = col-sm-3 col-md-3 }
hier wird nun die ausgewählte Kategorie ausgelesen und kann perfekt weiter verwendet werden.
Kann noch erweitert werden mit z.B.: „separator = ,“ oder „removeEmptyValues = 1“
Bitte postet mir Eure Erfahrungen und Snippets im Bereich „sys_category“ ! Vielen Dank.
Eure Meinung zu dem Artikel ist gefragt! Schreibt mir ein Kommentar
Ich freue mich auf einen Blick auf meine Amazon-Wunschliste. Vielen Dank!
Tom
Hi,
vllt habe ich’s überlesen, aber wie bekomme ich folgendes hin:
Ich habe ein CE (Text/Media) und wähle hier 2 Kategorien aus. Die 2 ausgewählten Kategorien möchte ich nun im Inhaltselement selbst ausgeben wie funktioniert das?
Danke
Tom
Martin
HI,
danke für den Code, funktioniert bei mir – allerdings nur auf der Root Page.
auf meinen Unterseiten wird die Kategorie nicht ausgegeben….
…
30 = CONTENT
30 {
wrap = |
table = pages
select {
uidInList.field = uid
pidInList = 1
selectFields = sys_category.title
join = sys_category_record_mm ON pages.uid = sys_category_record_mm.uid_foreign JOIN sys_category ON sys_category.uid = sys_category_record_mm.uid_local
where = sys_category_record_mm.tablenames = ‚pages‘
orderBy = sys_category.sorting
}
renderObj = TEXT
renderObj {
field = title
wrap = |
}
}
habe ich da einen Fehler?
Danke & Lg
Chris
Ach und noch etwas, wenn ich die Kategorie als CSS-Klasse ausgeben möchte, ist es auch möglich nicht nur die Unterkategorie sondern zusätzlich auch die Elternkategorie auszugeben?
Chris
Hallo zusammen!
Ist es denn möglich nur die Unterkategorien einer bestimmten ID auszugeben? Beispielsweise alle Unterkategorien der ID 1 oder alternativ die Struktur zu verschachteln?
Wäre über jeden Tipp dankbar! 🙂
Grüße,
Chris
– Hauptkategorie 1 (ID 1)
–– Unterkategorie 1 der Hauptkategorie 1 (ID 2)
–– Unterkategorie 2 der Hauptkategorie 1 (ID 3)
– Hauptkategorie 2 (ID 4)
–– Unterkategorie 1 der Hauptkategorie 2 (ID 2)
–– Unterkategorie 2 der Hauptkategorie 2 (ID 6)
Hauptkategorie 1
Unterkategorie 1 der Hauptkategorie 1
Hauptkategorie 2
Pingback: sys_category.title um tt_content.image.20 wrappen
basti
poste auf jeden Fall mal einen Status. Würde mich freuen! Danke
Urs
Ich habe ein Ticket erfasst: http://forge.typo3.org/issues/65228
Urs
Hi
Nach zwei Tagen wildem „Kategorienauslesen“ würde es mich freuen, wenn quasi als OP zu diesem Thema einmal auf folgenden Thread schauen könntest: http://stackoverflow.com/questions/28516829/how-to-get-page-categories-in-typoscript-and-use-with-tx-news
Der Usecase: Redaktor vergibt Kategorien in tx_news, und kategorisiert dann auch Seiten (sind ja dieselben sys_categories. Per TS werden dann auf allen Seiten zu den Seitenkategorien passende News ausgegeben.
Bei mir hat nichts funktioniert an allen herumschwirrenden Beispielen, ausser meiner eigenen Antwort (bei der ich später noch eine Variante mit „RECORDS“ ausprobieren will). Was hältst du davon?
Und: weisst du, ob es schon ein forge-Ticket zu dem Thema gibt? Die sys_categories sollten doch per getText zu holen sein, ohne MySQL-Übungen.
Kategorische Grüsse
Urs
basti
ich habe mal ein neues BSP eingefügt wo ich Bestimmte Kat´s ID auslesen könnt. D.h. man kann damit auch von einer bestimmten Kat alle Unter-Kat´s auslesen.
kinge
Hi,
vielen Dank für deinen Post, hat mir sehr weitergeholfen. Ich habe eine Liste von Kategorien erstellt, in der die kategorisierten Seiten untergeordnet dargestellt werden:
lib.categorylist = COA
lib.categorylist {
10 = CONTENT
10 {
table = sys_category
select {
pidInList = 54
orderBy sys_category.uid
selectFields = title
}
renderObj = COA
renderObj{
10 = TEXT
10 {
field = title
wrap = |
}
20 = CONTENT
20 {
table = sys_category
select {
uidInList.field = uid
pidInList = 54
leftjoin = sys_category_record_mm ON (sys_category.uid = sys_category_record_mm.uid_local) JOIN pages ON (sys_category_record_mm.uid_foreign = pages.uid)
where = (tablenames = ‚pages‘)
orderBy = sys_category.sorting
}
renderObj = COA
renderObj{
10 = TEXT
10 {
field = title
typolink.parameter = {field:uid}
typolink.parameter.insertData = 1
wrap = |
}
wrap = |
}
wrap = |
}
wrap = |
}
}
wrap = Kategorisierte Seiten|
}
Bei den Kategorien werden aber Unterkategorien auf der gleichen Ebene angezeigt. Hast du einen Tipp, wie ich hier die Kategoriestruktur abgebildet bekomme?
Besten Dank und viele Grüße!
Klaus
…natürlich falsch, es wird die „uid_foreign“ der Tabelle „sys_category_record_mm“ ausgegeben.
Hat jemand eine Idee, wie ich an die „uid“ der Tabelle „sys_categorie“ rankomme? Mit „field = title“ klappts, aber mit „field = uid“ nicht.
Klaus
….natürlich falsch, es wird nicht die Anzahl sondern die „uid_foreign“ der Tabelle „sys_category_record_mm“ ausgegeben.
Hat jemande eine Idee wie ich an die uid der tabelle „sys_category“ komme? Mit „field = title“ klappts ja auch….
Klaus
Hallo zusammen!
Kann ich auch die uid der Kategorie richtig auslesen?
So kriege ich nur die Anzahl der Kategorien als Schleife!? „4,4,4,4,“
renderObj = TEXT
renderObj {
field = uid
wrap = |
stdWrap.wrap = |,
split {
token = ,
token.noTrimWrap = || |
}
}
Sebastian
Die Email steht unter „Kontakt“
Viele Grüße
Martin
Hallo,
auf Gist habt Ihr versucht, die ID-Tags mehrerer Kategorien einzubinden. So wie es dort geschrieben steht, geht es nicht:
renderObj = TEXT
renderObj {
field = title
wrap = |
stdWrap.wrap = |,
split {
token = ,
token.noTrimWrap = || |
}
}
statt dessen funktioniert:
renderObj = TEXT
renderObj {
field = title
wrap = |
noTrimWrap = || |
}
Danke für den Rest des Codes.
Eine Frage noch: Wäre es möglich, in TS den Rückgabewert über eine IF-Abfrage auszuwerten? Ich stelle mir soetwas vor wie: Binde einen RECORD nur ein, wenn er die gleiche Kategorie hat wie die Seite …
Viele Grüße
Martin
Zabinetta
Hi,
Hat jemand von euch schon media-Kategorien von sys_file ausgelesen? In TYPO3 6.1 ? Oder weiß ob das mit Typoscript überhaupt geht?
Das Problem dabei ist vermutlich, daß sowohl sys_file als auch sys_category in der Rootpage (pid=0) liegen….
Mein Stand ist momentan (zeigt nichts an):
tt_content.uploads.20.renderObj.30 {
htmlSpecialChars >
data = file:current:description
required = 0
preCObject = TEXT
preCObject {
data = file:current:creator
wrap = Autor: |
required = 1
}
value = {file:current:description}
insertData = 1
postCObject = COA
postCObject{
# …..
30 = CONTENT
30 {
table = sys_file
select{
uidInList.data = file:current:uid
############## hier. RECORDS geht natürlich nicht weil ich da nicht joinen kann
pidInList = 0
################
selectFields = sys_category.title
join = sys_category_record_mm ON sys_file.uid = sys_category_record_mm.uid_foreign JOIN sys_category ON sys_category.uid = sys_category_record_mm.uid_local
where = 1 = 1
andWhere = sys_category_record_mm.tablenames = ‘sys_file’
#orderBy = sys_category.sorting
}
stdWrap.outerWrap = Kategorie(n):
renderObj = TEXT
renderObj {
field = sys_category.title
wrap = |
}
}
}
}
step
Hab es aktuell lokal. werde es heut mal umziehen und dir einen admin account einrichten. Danke vorab.
Zugang sende ich Dir per E-Mail – bitte kurz den Kontakt an mich per E-Mail senden.
Die Kommentare hier die nicht zielführend sind darfst du gern löschen.
Sebastian
dann müsste ich mir einmal das TYPO3 bei Dir selbst anschauen!
step
sowohl im Template Setup via TYPO3 Backend gepflegt oder über ausgelagerte .ts Datei beie ANsätze geben hier einzig Tag aus ohne weitere Klasse oder ID
step
Das gibt hier leider gar nichts im BODY Tag aus.
Sebastian
genau so geht das bei mir 😉
https://gist.github.com/stepgit/11017184#comment-1213840
#Normal Body
page.bodyTag >
page.bodyTagCObject >
page.bodyTagCObject = COA
page.bodyTagCObject {
#Kategorie auslesen
10 = CONTENT
10 {
wrap =
table = pages
select {
languageField = sys_language_uid
uidInList.field = uid
pidInList = 1
selectFields = sys_category.title
join = sys_category_record_mm ON pages.uid = sys_category_record_mm.uid_foreign JOIN sys_category ON sys_category.uid = sys_category_record_mm.uid_local
where = sys_category_record_mm.tablenames = ‚pages‘
orderBy = sys_category.sorting
}
renderObj = TEXT
renderObj {
field = title
}
}
}
wichtig, die pidInList = xx prüfen! Hier die ID angeben, wo die Kategorien abgespeichert sind!
step
Hi Sebastian,
vielen Dank aber das klappt hier nicht – es wird kein Wert ausgegeben.
anbei mal mein Versuch als gist (da hier im Kommentar vermitlich einige Zeichen verbogen/gelöscht werden):
https://gist.github.com/stepgit/11017184
Sebastian
schau mal, so hatte ich mir das gedacht:
#KATEGORIE im body
page.bodyTag >
page.bodyTagCObject >
page.bodyTagCObject = COA
page.bodyTagCObject {
#Kategorie auslesen
10 = CONTENT
10 {
wrap =
table = pages
select {
languageField = sys_language_uid
uidInList.field = uid
pidInList = 1
selectFields = sys_category.title
join = sys_category_record_mm ON pages.uid = sys_category_record_mm.uid_foreign JOIN sys_category ON sys_category.uid = sys_category_record_mm.uid_local
where = sys_category_record_mm.tablenames = ‚pages‘
orderBy = sys_category.sorting
}
renderObj = TEXT
renderObj {
field = title
#stdWrap.wrap = |,
#split {
# token = ,
# token.noTrimWrap = || |
#}
}
}
}
step
der erste wrap wurde um das html body tag „beschnitten“
soll lauten spitze-Klammer-aufbody id“|“spitze-Klammer-zu
step
setup.ts
lib.bodyClasses = TEXT
lib.bodyClasses.value {
wrap =
table = sys_category
select {
pidInList = 1
join = sys_category_record_mm ON(sys_category_record_mm.uid_local=sys_category.uid)
where = sys_category_record_mm.tablenames=’pages‘
andWhere.dataWrap = sys_category_record_mm.uid_foreign = {TSFE:id}
}
renderObj = TEXT
renderObj {
field = title
wrap = |
}
}
page.bodyTagCObject = < lib.bodyClasses
Mein Versuch funktioniert hier leider nicht (es wird kein Wert ausgegeben).
Auch der LOAD_REGISTER Ansatz war bisher leider nicht erfolgreich.
Bin für jeden Tipp dankbar.
Sebastian
das kannst du doch um deinen „wrap“ bauen!
oder Du packst alles in {register:namehier}
step
ok ich kann nun den jeweils aktiven Kategorienamen (Titel) bspw. im Frontend ausgeben. Danke für den Beitrag bis hier her.
Aber nun suche ich nach einer Lösung diese Angabe als CSS Klasse (oder wahlweise ID) dem body-Tag mitzugeben.
Jemand hierzu eine Idee?
Sebastian
eine gute Frage 😉
muss ich mir mal anschauen! Aber wenn Du dazu schon vorher eine Lösung findest, kannst Du die uns gerne mitteilen 😉
Grüße
stefan
super sache danke.
gibt es eine möglichkeit die sys_categories im backend auf bestimmte ordner zu beschränken?
also z.b. in den tx_news werden die ja nun auch verwendet. aber die kategorien will man vielleicht dann nicht für den restlichen seitenbaum verwenden sondern andere.
gruss
stefan