Hallo.
Ich versuche gerade eine Navigation zu realisieren, die (nur auf einem Teil der Seite) zur vorhergehenden oder nächsten Seite leitet. Mit einem HMENU mit special = browse lässt sich das ja recht gut implementieren. Mein Problem besteht nun darin, dass einige der Seiten auch noch Unterseiten besitzen, die auch durchlaufen werden sollen.
Das sieht dann z.B. so aus:
- Seite 1
+ Seite 2
| - Unterseite 1
| - Unterseite 2
- Seite 3
...
Die Seiten sollen in der Reihenfolge durchlaufen werden, wie sie hier stehen. Mit special=browse kann man aber nicht so navigieren, wie ich mir das vorstelle.
Wie könnte ich das Vorhaben anders realisieren?
Christian.
So..., selbst ist der Mann.
Nach einiger Zeit im Hobbykeller mit Laubsäge und Vorschlaghammer habe ich folgendes zurecht gezimmert - vielleicht hilft es ja jemandem mit ähnlichem Problem:
# get the parent id of a page
lib.pageup = RECORDS
lib.pageup {
source.data = leveluid:-1
tables = pages
conf.pages = TEXT
conf.pages.field = pid
}
# get the id of the first child of a page
lib.pagedown = CONTENT
lib.pagedown {
table = pages
select {
pidInList = this
orderBy = sorting ASC
where = nav_hide=0 AND hidden=0
max = 1
}
renderObj = TEXT
renderObj.field = uid
}
# get the id of a pages previous sibling
lib.pagenext = CONTENT
lib.pagenext {
table = pages
select {
pidInList.cObject < lib.pageup
orderBy = sorting ASC
where = nav_hide=0 AND hidden=0
andWhere.field = sorting
andWhere.wrap = sorting > |
max = 1
}
renderObj = TEXT
renderObj.field = uid
}
# get the id of a pages next sibling
lib.pageprev = CONTENT
lib.pageprev {
table = pages
select {
pidInList.cObject < lib.pageup
orderBy = sorting DESC
where = nav_hide=0 AND hidden=0
andWhere.field = sorting
andWhere.wrap = sorting < |
max = 1
}
renderObj = TEXT
renderObj.field = uid
}
# get the id of the next page in our desired order
lib.pagenavinext = TEXT
lib.pagenavinext {
# try to go down to a lower level
cObject < lib.pagedown
# if not available
ifEmpty{
# try the next page on same level
cObject < lib.pagenext
# if not available
ifEmpty{
# try the next page on higher level
cObject < lib.pagenext
cObject.select.pidInList.cObject.source.data = leveluid:-2
}
}
}
# get the id of the previous page in our desired order
lib.pagenaviprev = TEXT
lib.pagenaviprev {
# try to go down to a lower level
cObject < lib.pagedown
cObject.select.pidInList >
cObject.select.pidInList.cObject < lib.pageprev
# we need the last item, not the first
cObject.select.orderBy = sorting DESC
# if not available
ifEmpty {
# try the prev page on same level
cObject < lib.pageprev
# if not available
ifEmpty {
# try the prev page on a higher level
cObject < lib.pageup
}
}
}
Angewendet könnte der Spass dann so aussehen:
page.10.subparts{
PROGRESSBAR = COA
PROGRESSBAR {
wrap = <div id="progressbar">|</div>
5 = TEXT
5 {
value = << previous
typolink {
parameter.cObject < lib.pagenaviprev
# '<' needs to be html encoded, but this forum seems not to accept it
ATagParams = class="prev" title="<< previous"
}
if.isTrue.cObject < lib.pagenaviprev
}
10 = HMENU
10 {
# usual menu to access pages directly
}
15 = TEXT
15 {
value = next >>
typolink {
parameter.cObject < lib.pagenavinext
ATagParams = class="next" title="next >>"
}
if.isTrue.cObject < lib.pagenavinext
}
}
Die Seite, bei der wir es angewendet haben ist leider noch nicht online, wird aber nachgereicht, sobald sie veröffentlicht wird. 😃
Kommentare, Verbesserungen, etc. sind ausdrücklich erwünscht!
Christian.
*klatsch* Ein tolles Beispiel, was man mit Typoscript alles anstellen kann. Man könnte hier und da noch ein paar Zeilen einsparen durch kopieren, aber dafür leidet natürlich die Lesbarkeit.
Hi Christian,
danke für das TS-Schnipsel! Da es sich vielversprechend anhörte, hab ich es gleich für meinen Fall getestet.
Leider habe ich damit noch ein Problem (siehe angehängte Grafik). Ich habe das TS als Template auf der UID 79 eingehängt.
Bis UID 130 blättert er sauber durch, danach erfolgt der Sprung auf UID 222, was ja nicht stimmt. UID 131 wäre richtig!
Habe den Eindruck das in lib.pagenext ein sorting aus der falschen Ebene genutzt wird, kann das sein?
Danke und Gruss von Jacob
