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

Antwort per Email an