Hallo Forum
wie kann ich alle System Kategorien auswählen? Ich möchte ein Menü erstellen welches mir alle Kategorien anzeigt ohne sie explizit im TS angeben zu müssen. Oder gibt es eine Möglichkeit alle Kategorien aus einem Sysfolder zu holen?
Diese Varianten funktionieren nicht:
special.value = all
special.value = *
#special.value = 1,2,3
temp.pages = HMENU
temp.pages {
special = categories
special.value = 1,2,3
wrap = <div class="white"><div class="innerwrap"><h2>Produkte</h2><ul>|</ul></h1></div></div>
1 = TMENU
1.NO {
allWrap = <li>|</li>
}
}
lg opaque
HMENU berücksichtigt nur Seiten - steht auch explizit so in den docs:
special = categories: "Makes a menu of pages belonging to one or more categories."
Du kannst aber mit einem CONTENT Objekt auf table = sys_categories alle auslesen und dir im renderObj selbst das Menü zusammen schieben.
Ok so geht es Kategorien aus einem Sysfolder zu holen und darzustellen:
temp.cat = CONTENT
temp.cat {
wrap = <h2>KAtegorien</h2><ul id="categories">|</ul>
table = pages
select {
uidInList.field = uid
pidInList = 24
selectFields = *
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'
andWhere.dataWrap = sys_category.sys_language_uid = {GP:L}
groupBy = sys_category.title
#orderBy = sys_category.sorting
orderBy = sys_category.title
}
renderObj = COA
renderObj.10 = TEXT
renderObj.10 {
field = uid
wrap = <li id="cat|">
}
renderObj.20 = TEXT
renderObj.20 {
field = title
stdWrap.typolink.parameter.field = uid
stdWrap.typolink.additionalParams.dataWrap = |&type=104
wrap = |</li>
}
}
Was ich jetzt noch brauche ist eine Abfrage aller Seiten aus eienem Sysfolder inkl. aller zugeordneten Kategorien:
Die Ausgabe sollte in etwa so aussehen:
<li class="cat1 cat2 cat5 cat10">PageTitle</li>
So komme ich an die Seiten aber es fehlt noch der JOIN zu den Kategorien und vor allem wie füge ich mehrere Kategorien in die Klasse ein. Ich brauche das um später via jQuery bei MouseOver Produkte hervorzuheben.
temp.pro = CONTENT
temp.pro {
wrap = <h2>Produkte</h2><ul id="categories">|</ul>
table = pages
select {
uidInList.field = uid
pidInList = 24
selectFields = *
}
renderObj = COA
renderObj.10 = TEXT
renderObj.10 {
field = uid
noTrimWrap = |<li id="cat| |
}
renderObj.15 = TEXT
renderObj.15 {
field = categories
wrap = |">
}
renderObj.20 = TEXT
renderObj.20 {
field = title
stdWrap.typolink.parameter.field = uid
stdWrap.typolink.additionalParams.dataWrap = |&type=104
wrap = |</li>
}
}
hier bekomme ich immer nur die Anzahl der Kategorien raus.
lg opaque
Vielleicht habe ich das ja falsch verstanden, aber ich glaube ich habe das was du willst mal mit tt_content gemacht, theoretisch sollte sich das einfach adaptieren lassen. Im Prinzip wir ein Teil deines renderObj ( z.b. 15 ) eine Subquery:
20 = CONTENT
20 {
if.isTrue.field = categories
table = tt_content
select {
uidInList.field = uid
join = sys_category_record_mm ON tt_content.uid = sys_category_record_mm.uid_foreign JOIN sys_category ON sys_category.uid = sys_category_record_mm.uid_local
orderBy = sys_category.sorting
}
renderObj = TEXT
renderObj.field = title
renderObj.noTrimWrap = || |
}
Allerdings solltest du aus deinem
<li id="
evtl. ein "class" machen.
Damit bekomme ich aber leider keine Kategorien ausgegeben.
temp.pro = CONTENT
temp.pro {
wrap = <h2>Produkte</h2><ul id="categories">|</ul>
table = pages
select {
uidInList.field = uid
pidInList = 24
selectFields = *
}
renderObj = COA
renderObj.5 = TEXT
renderObj.5 {
value = <li class="
}
## AB HIER STIMMT WAS NICHT
renderObj.10 = CONTENT
renderObj.10 {
if.isTrue.field = categories
wrap = |">
table = tt_content
select {
uidInList.field = uid
join = sys_category_record_mm ON tt_content.uid = sys_category_record_mm.uid_foreign JOIN sys_category ON sys_category.uid = sys_category_record_mm.uid_local
orderBy = sys_category.sorting
}
renderObj = TEXT
renderObj.field = title
renderObj.noTrimWrap = |cat| |
}
## BIS HIERHER
renderObj.20 = TEXT
renderObj.20 {
field = title
stdWrap.typolink.parameter.field = uid
stdWrap.typolink.additionalParams.dataWrap = |&type=104
wrap = |</li>
}
}
Ausgabe:
<li class="">
<a href="index.php?id=25&L=0&type=104">Produkt1</a>
</li>
<li class="">
<a href="index.php?id=26&L=0&type=104">Produkt2</a>
</li>
<li class="">
<a href="index.php?id=27&L=0&type=104">Produkt3</a>
</li>
Es sollte aber so aussehen:
<li class="cat1 cat3 cat4">
<a href="index.php?id=25&L=0&type=104">Produkt1</a>
</li>
<li class="cat3">
<a href="index.php?id=26&L=0&type=104">Produkt2</a>
</li>
<li class="cat4">
<a href="index.php?id=27&L=0&type=104">Produkt3</a>
</li>
lg opaque
Warum denn in Zeile 21 plötzlich "table = tt_content"?
Ich dachte, du hast deinen Seiten Kategorien zugeordnet?
Hallo jenses
danke für den Tipp so geht es. Sollte es mal jemand brauchen:
Im Sysfolder mit der ID 24 liegen die Kategorien.
temp.cat erzeugt eine Liste mit Kagegorien.
temp.pro erzeugt eine Liste mit den Seiten und fügt die Kategorie ID als Klasse ein.
der typolink lädt dann die Seite via ajax.
temp.cat = CONTENT
temp.cat {
wrap = <h2>Kategorien</h2><ul id="categories">|</ul>
table = sys_category
select {
pidInList = 24
selectFields = *
join = sys_category_record_mm ON sys_category_record_mm.uid_local = sys_category.uid
where.data = field:uid
groupBy = sys_category.title
orderBy = sys_category_record_mm.sorting_foreign
languageField = sys_category.sys_language_uid
}
renderObj = COA
renderObj.10 = TEXT
renderObj.10 {
field = uid
wrap = <li id="cat|">
}
renderObj.20 = TEXT
renderObj.20 {
field = title
wrap = |</li>
}
}
temp.pro = CONTENT
temp.pro {
wrap = <h2>Produkte</h2><ul id="products">|</ul>
table = pages
select {
uidInList.field = uid
pidInList = 24
selectFields = *
}
renderObj = COA
renderObj.5 = TEXT
renderObj.5 {
value = <li class="
}
renderObj.10 = CONTENT
renderObj.10 {
if.isTrue.field = categories
wrap = |">
table = pages
select {
uidInList.field = uid
pidInList = 24
selectFields = *
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
groupBy = sys_category.uid
}
renderObj = TEXT
renderObj.field = uid
renderObj.noTrimWrap = |cat_| |
}
renderObj.20 = TEXT
renderObj.20 {
field = title
stdWrap.typolink.parameter.field = uid
stdWrap.typolink.additionalParams.dataWrap = |&type=104
wrap = |</li>
}
}
lib.content_ts = COA
lib.content_ts.10 < temp.cat
lib.content_ts.20 < temp.pro
lg opaque