[TYPO3-german] mit Typoscript nächsten und vorherigen Datensatz holen (konkret: tx_news)?
Gerhard Mehsel
sparking at gmx.net
Wed Jul 10 11:44:50 CEST 2013
Hallo Bernd,
danke für deinen Schubser.
Am 08.07.13 08:57, schrieb bernd wilke:
> Am 06.07.13 22:23, schrieb Gerhard Mehsel:
>> Hallo,
>>
>> es gibt ja die Möglichkeit mit Typoscript select Datensätze aus einer
>> Tabelle zu holen. Gibt es auch eine Möglichkeit, den nächsten und den
>> vorherigen Datensatz zu holen, und zwar so, dass alle möglichen hidden,
>> deleted, language_overlay, ... Felder beachtet werden?
>>
>> Konkret: ich habe die uid eines tx_news Datensatzes, brauche aber auch
>> den vorhergehenden und nachfolgenden Datensatz für "vorheriger Artikel"
>> und "nächster Artikel"-Links (in der Detailansicht). Dabei sollten
>> natürlich die Restriktionen wie z.B Kategorie, hidden und deleted etc.
>> berücksichtigt werden.
>>
>> Gibt es da eine Möglichkeit? Oder einen ganz anderen Ansatz?
>
> das ist doch in erster Linie eine Frage des Queries.
> da würde ich so etwas ansetzen:
>
> SELECT * FROM {table} WHERE sorting > {current sorting-value} AND
> enablefields({table}) ORDER BY sorting ASC LIMIT 0,1
>
> bzw. je nach aktueller sortierreihenfolge zb bei News mit datetime statt
> sorting.
> Für Vorgänger entsprechend < und DESC
>
> das jetzt in Typoscript umzusetzen ist dann der nächste Schritt und
> "bleibe dem werten Leser als Übung überlassen" ;-)
Folgendes ist rausgekommen, vielleicht kanns ja jemand brauchen, ich
hoffe man kann's lesen.
Achtung:
- nicht getestet für andere Sprachen als die default Sprache;
- shared Newsdatensätze, (andere PID, gleiche Kategorie) werden nicht
berücksichtigt!
Sollte jemand noch andere Probleme bemerken, nur her damit.
# next article:
# next
#SELECT t2.title, t2.datetime FROM tx_news_domain_model_news t2
#JOIN tx_news_domain_model_news t1
#ON (t1.datetime < t2.datetime)
#JOIN tx_news_domain_model_news_category_mm c1
#ON (t1.uid = c1.uid_local)
#JOIN tx_news_domain_model_news_category_mm c2
#ON (t2.uid = c2.uid_local)
#WHERE t1.uid = 4 AND c1.uid_foreign = c2.uid_foreign
#ORDER BY t2.datetime ASC LIMIT 0,1
#;
#-----------------------------------------
20 = CONTENT
20 {
table = tx_news_domain_model_news
select {
pidInList {
stdWrap {
cObject = RECORDS
cObject {
tables = tx_news_domain_model_news
source.data = GP:tx_news_pi1|news
source.intval = 1
conf.tx_news_domain_model_news = TEXT
conf.tx_news_domain_model_news {
field = pid
}
wrap = |
}
}
}
selectFields = tx_news_domain_model_news.title,
tx_news_domain_model_news.datetime
join {
cObject = COA
cObject {
10 = TEXT
10.value = tx_news_domain_model_news t1 ON (t1.datetime <=
tx_news_domain_model_news.datetime)
10.noTrimWrap = || |
20 = TEXT
20.value = JOIN tx_news_domain_model_news_category_mm c1 ON
(t1.uid = c1.uid_local)
20.noTrimWrap = || |
30 = TEXT
30.value = JOIN tx_news_domain_model_news_category_mm c2 ON
(tx_news_domain_model_news.uid = c2.uid_local)
}
}
where.data = GP:tx_news_pi1|news
where.noTrimWrap = |t1.uid = | AND c1.uid_foreign = c2.uid_foreign|
where.intval = 1
andWhere.data = GP:L
andWhere.wrap = tx_news_domain_model_news.sys_language_uid = |
andWhere.intval = 1
andWhere.if.isTrue.data = GP:L
orderBy = tx_news_domain_model_news.datetime ASC
max = 1
}
renderObj = COA
renderObj {
10 = TEXT
10.value = nächster Artikel
10.wrap = |
10.typolink {
useCacheHash = 1
parameter.data = TSFE:id
ATagParams = title="{field:title}"
ATagParams.insertData = 1
additionalParams {
cObject = COA
cObject {
10 = TEXT
10.value = &tx_news_pi1[news]={field:uid}
10.insertData = 1
20 = TEXT
20.value = &tx_news_pi1[controller]=News
30 = TEXT
30.value = &tx_news_pi1[action]=detail
}
}
}
}
}
#------------------------------------------
Schöne Grüße,
Gerd
More information about the TYPO3-german
mailing list