Unmengen von Neuigkeiten

24. Juni 2009

Für eine TYPO3-Seite benutze ich ein bisschen TypoScript, um tt_news-Einträge in einen Marker zu kopieren, damit diese News-Liste auf allen Seiten an der selben Stelle angezeigt wird.

1
2
3
4
5
6
7
8
9
temp.contextnews = COA_INT
temp.contextnews {
    10 = RECORDS
    10 {
        tables = tt_content
        source = {$tt_news.plugin_id}
    }
}
lib.contextnews < temp.contextnews

Hierbei wird einfach in Zeile 5 die entsprechende Tabelle ausgewählt und in Zeile 6 die ID des tt_news-Plugins angegeben. Das ganze kann man dann noch entsprechend stylen und alles ist gut.

Bis irgendwann noch eine Kategorie hinzukommt und man alle Einträge anzeigen lassen will außer die, die in einer bestimmten Kategorie stehen.
Dabei hilft das obige TypoScript nicht mehr, dann muss man die Einträge direkt auswählen und selbst rendern. Da die Liste der News-Titel natürlich auch noch verlinkt werden soll, muss man zuerst ein Muster für den Link vorbereiten:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
temp.newsMenuLinkParams = COA
temp.newsMenuLinkParams {
     10 = TEXT
    10 {
        field = uid
        wrap = &tx_ttnews[tt_news]=|
    }

    20 = TEXT
    20 {
        field = tstamp
        date = Y
        wrap = &tx_ttnews[year]=|
    }

    30 = TEXT
    30 {
        field = tstamp
        date = m
        wrap = &tx_ttnews[month]=|
    }
}

Hat man das, muss man die entsprechenden Einträge aus der tt_news-Tabelle auslesen (Zeilen 3-11) und dann rendern (Zeilen 13-18). Und im Ergebnis hat man die selbe Liste wie vorher, nur das alle Einträge, die in einer bestimmten Kategorie stehen, nicht auftauchen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
temp. contextnews = CONTENT
temp. contextnews {
     table = tt_news
     select {
          pidInList = {$plugin.tt_news.pid_list}
          orderBy = tstamp DESC
          selectField = uid,tstamp,title
          max = 5
          where = uid_foreign NOT IN ({$plugin.tt_news.ignore_uids})
          join = tt_news_cat_mm ON (tt_news.uid=tt_news_cat_mm.uid_local)
     }
     
     renderObj =  TEXT
     renderObj {
          field = title
          typolink.parameter = {$plugin.tt_news.singlePid}
          typolink.additionalParams.cObject < temp.newsMenuLinkParams
     }
}
lib.contextnews < temp.contextnews

Damit sind die entsprechenden Einträge ausgewählt, die dann noch gerendert werden müssen. Dazu brauchen wir dann auch das Objekt, das das Muster des tt_news-Links enthält, also.

Das war es schon. ;-)

Eventuell gibt es einfacherer oder elegantere Wege, die gewünschte Liste zu erstellen. Aber es funktioniert.

4 Kommentare und Trackbacks

Kommentar(e)

  1. Tom K. sagte am 24. Juni 2009 um 20:58 Uhr:

    Laut tt_news Handbuch sollte folgendes funktionieren:

    1
    2
    3
    4
    5
    6
    7
    plugin.tt_news {
        # show news which have none of the selected categories assigned (OR)
        categoryMode = -2

        # Kategorie abwählen
        categorySelection = 6
    }
  2. Andreas Gaul sagte am 29. Juni 2009 um 18:38 Uhr:

    Leg’ Dir irgendwo versteckt eine Seite hin, in der Du im Content tt_news einbindest mit den entsprechenden Katagorie-Konfigurationen und zieh’ den Inhalt dieser Seite in Deinen Bereich mit:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    temp.testcontent = CONTENT
    temp.testcontent {
      table = tt_content
      select {
        pidInList = 435    #PID der Quellseite
        orderBy = sorting
      }
    }
    lib.contextnews < temp.testcontent
  3. rifter sagte am 29. Juni 2009 um 18:41 Uhr:

    @tomk und @andreas: Beide Varianten funktionieren auch, allerdings haben die jeweils auch Nachteile, genau wie mein Ansatz. ;-)

    Bei der Variante von Tom K. muss das tt_news erst konfiguriert und ein Template geschrieben werden, bei der Variante von Andreas benötigt man eine extra Seite. Es scheint ca. 1000 Wege zu geben, TYPO3 dazu zu bekommen, das zu tun, was man von ihm möchte.

  4. Robert sagte am 28. Juli 2009 um 12:37 Uhr:

    Es wäre besser wenn man statt tstamp, die datetime verwendet, da der timestamp ja nur das bearbeiten der News, und nicht das offizielle Veröffentlichungsdatum wiederspiegelt.
    Den Tag sollte man auch noch gleich mit einbeziehen.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    temp.newsMenuLinkParams {
      10 = TEXT
      10.field = uid
      10.wrap = &amp;tx_ttnews[tt_news]=|
      20 = TEXT
      20.field = datetime
      20.date = Y
      20.wrap = &amp;tx_ttnews[year]=|
      30 = TEXT
      30.field = datetime
      30.date = m
      30.wrap = &amp;tx_ttnews[month]=|
      40 = TEXT
      40.field = datetime
      40.date = d
      40.wrap = &amp;tx_ttnews[day]=|
    }

Hinterlasse einen Kommentar

Ours is the age which is proud of machines that think and suspicious of men who try to.
„O brave new world”
Howard Mumford Jones, 1964

Basistheme von BenediktRB • Überarbeitet von tagmanufaktur.de • Powered by Wordpress • Abonniere den RSS Feed