Navigation über Contentelemente

TYPO3 bringt in der Regel alles mit was man zum erstellen einer Webseite braucht. Oftmals ist es auch nicht unbedingt erforderlich zusätzliche Extensions zu Installieren. So kann man sich mit Bordmitteln von TYPO3 auch ein eigenes Blogsystem bauen, welches zudem auch noch sehr flexible in der Gestaltung ist.

Erstmal nur ein Menü

In den einschlägigen Blogsystemen wie Wordpress oder Drupal existieren per default Übersichtsseiten welche jeden neuen Eintrag im Blog an oberster Stelle plazieren und dabei nur ein paar Zeilen bzw. Wörter des eigentlichen Artikels darstellen. Ausgeschmückt ist das ganze dann, leider nicht allzu oft, mit dem Datum der Erstellung, der letzten Änderung und dem Namen des Authors.
In TYPO3 werden im Normalfall Webseiten aus mehreren Frontend-Content-Elementen erzeugt, kurz FCE genannt. In der Datenbank von TYPO3 existiert zu jeder Webseite ein Eintrag in der Tabelle pages und zu jeden FCE ein Eintrag in der Tabelle tt_content. In beiden Tabellen werden der Zeitpunkt der Erstellung und Änderung der Datensätze mit angelegt und auch gepflegt, ohne das der Author dies von Hand erledigen muss. Somit haben wir hier auch schon alle notwendigen Daten um uns eine Übersicht der neuesten Artikel und Beiträge anzuzeigen. Dazu benötigt man zuerst die Startseite im Seitenbaum unter der alle Webseiten abgelegt werden, welche dann auf der Übersichtsseite angezeigt werden sollen.
Hierbei gibt es 2 Möglichkeiten. Zum einen die automatische Auswahl anhand der aktuellen pid, oder man legt den Startpunkt manuell per Typoscript fest.

Auswahl der Startseite

# Automatischer Startpunkt anhand der aktuellen Seite
lib.menu.uebersicht = COA
lib.menu.uebersicht{
  10 = CONTENT
  10{
    stdWrap.wrap = |
    table = pages
    select.pidInList.if.isTrue.field = pages
    select.pidInList.field = pages
  }
}

# Manuelle Auswahl der Startseite
lib.menu.uebersicht = COA
lib.menu.uebersicht{
  10 = CONTENT
  10{
    stdWrap.wrap = |
    table = pages
    select.pidInList = 14
  }
}

Weitere Einstellungen

Mit diesem TypoScript werden nun alle Unterseiten der aktuellen Seite bzw. der Seite mit der ID 14 ausgewählt. Und zwar unsortiert und unabhängig davon ob diese Seiten sichtbar oder unsichtbar sind.
Da in der Tabelle pages das Änderungsdatum der Seite im Feld tstamp mit angelegt wird können wir uns das Ergebniss damit auch gleich sortieren lassen. Im Feld nav_hide der Tabelle pages wird festgelegt ob eine Seite in der Navigation sichtbar sein soll. Dieses können wir natürlich auch gleich noch mitbenutzen. Und zum Schluß begrenzen wir das ganze dann noch auf 10 Elemente, damit es auch übersichtlich bleibt.

    select.orderBy = tstamp desc
    select.where = nav_hide=0
    select.max = 10

Einbau des Titels

Im Moment haben wir also eine Auswahl der einzelnen Seiten ... mehr nicht. Den Titel holen wir uns aus dem Seitentitel der Seite, nicht aus der Überschrift des FCEs. Also müssen wir uns als nächstes um den Titel kümmern. Den gibts fast gratis zur vorbereitenden Auswahl und Sortierung des Seiten dazu und man muss ihn nur noch einbauen. Selbstverständlich hübsch geschmückt als Link

renderObj = COA
renderObj{
  5 = TEXT
  5.wrap = <h1>|</h1>
  5.field = title
  5.typolink.parameter.field = uid
}

Und zum Schluss gibt's den Inhalt

Die uid der Webseite nehmen wir in der tt_content als Auswahl für die pid. Das heist wir suchen in der tt_content nach allen Inhalten der momentan gültigen Seite, sortieren diese Inhalte nach dem Feld sorting, weil dieses Feld die tatsächliche Reihenfolge auf der Webseite angibt, und limitieren die Anzahl auf genau 1. Somit haben wir genau das erste FCE einer jeden Seite und müssen dieses nur noch zur Anzeige bringen. Hier stehen uns dann alle Datenbankfelder der tt_content zur Verfügung. Alles was hier drinne steht können wir uns auf der Webseite auch anzeigen lassen. Der Fantasie sind dadurch keinerlei Grenzen gesetzt und unsere Blogübersicht ist hiermit auch für andere Einsatzzwecke gut gerüstet. Beispielhaft sei hier der eigentliche Inhalt des FCE's aufgeführt. Dargestellt im Datenbankfeld bodytext.

10 = CONTENT
10{
  table = tt_content
  select.pidInList.field = uid
  select.where = colPos=0
  select.orderBy = sorting
  select.max = 1
  renderObj = COA                 
  
  # ANFANG auslesen des bodytext
  renderObj.100 = TEXT
  renderObj.100{
    field = bodytext
    wrap = <p class="bodytext">|</p>
  }
}

Zum Thema Blog ...

... wird es hier noch weitere Beiträge geben. Nur eine Übersichtsseite ist noch lange kein Blogsystem. Geplant ist noch eine TagWolke, ein Archiv und eine Schlüsselwortnavigation. Über kurz oder lang wird auch noch eine Kommentarfunktion zur Anwendung kommen. Inwieweit dieses Vorhaben aber tatsächlich ohne zusätzliche Extensions möglich ist wird sich zeigen. Bis auf die Kommentarfunktion sollte aber alles mit reinem TypoScript bzw. mit TYPO3 Boardmittel möglich sein.