Arghh... beim ersten join muss aus <= ein < gemacht werden! War noch zum
testen drin, sorry!
Am 10.07.13 11:44, schrieb Gerhard Mehsel:
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
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german