[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