News: Liste und Leser in einer Seite
Das Typolight News-Modul ist so konstruiert, dass von jeweils einer Seite/ Artikel für die Newsliste und einer weiteren für den Newsleser ausgegangen wird. Bei größeren Projekten mit zahlreichen Newsarchiven kann das schnell die Seitenstruktur verkomplizieren und vor allem sehr zeitraubend werden. Hier wird eine einigermaßen elegante Methode beschrieben, um Listen- und Leser-Modul in einem Artikel laufen zu lassen. Mithilfe des Hooks parseFrontendTemplate ist die Aufgabe relativ einfach zu bewerkstelligen. Programmierkenntnisse sind hierfür kaum bis gar nicht erforderlich. Es werden auch keine Inhalte per CSS versteckt oder ähnlicher Unsinn. Die Vorgehensweise ist update-sicher.
1. Modulverzeichnis inkl. config-Ordner anlegen
In root > sytem > modules manuell einen neuen Ordner anlegen. Für unser Vorhaben spielt der Name keine Rolle, aber um den Ordner evtl. später noch für andere Hooks/ Modulerweiterungen nutzen zu können, sollte er z.B. "zcustom" oder "zhooks" genannt werden (im weiteren Verlauf wird von einem Verzeichnis "zhooks"ausgegangen). Innerhalb dieses Ordners noch ein weiteres Verzeichnis "config" anlegen.
2. Die Konfiguration schreiben
Eine neue Datei config.php erzeugen und in root/system/modules/zhooks/config speichern.
Inhalt der Datei:
PHP-Code:
<?php
$GLOBALS['TL_HOOKS']['parseFrontendTemplate'][] = array('NewsDispatcher', 'parseFrontendTemplate');
?>
Der Name der Klasse (hier: "NewsDispatcher") ist frei wählbar, allerdings sollte er der PHP- / TL-typischen
Formatkonvention folgen. Wichtig ist, dass der Name mit dem hier unter Punkt 3 verwendeten Datei-/ Klassennamen
übereinstimmt. Außerdem sollte in dem neuen config-Verzeichnis noch eine .htaccess Datei abgelegt werden werden.
Inhalt der Datei:
Code:
order deny,allow
deny from all
3. Die Klasse schreiben
Eine neue Datei NewsDispatcher.php erzeugen und in root/system/modules/zhooks speichern.
Inhalt der Datei:
PHP-Code:
<?php
class NewsDispatcher extends Frontend
{
public function parseFrontendTemplate($strContent, $strTemplate)
{
if ($strTemplate == 'mod_newsreader')
{
if (substr_count($this->Environment->request, '/items/') != 1)
{
$strContent = '';
}
}
if ($strTemplate == 'mod_newslist')
{
if (substr_count($this->Environment->request, '/items/') == 1)
{
$strContent = '';
}
}
return $strContent;
}
}
?>
Was die Klasse macht:
Nichts besonders, sie ist über die neue config.php registriert und die in der Klasse enthaltene Funktion wird dank des TL-parseFrontendTemplate Hooks für jedes Template innerhalb jeder Seite, die ans Frontend geschickt wird, ausgeführt. Falls ein Listen oder Reader Modul unter den ausgegebenen Templates sein sollte, wird die URL geprüft und entsprechend reagiert.
Wir gehen hier davon aus, dass URLs TL-typisch umgeschrieben werden, für andere Fälle kann das Beispiel leicht angepasst werden. Zur Prüfung wird hier substr_count verwendet, andere PHP-Stringfunktionen erfüllen den Zweck ebenso. Die Treffsicherheit kann auch anders/ weiter abgesichert werden, wichtig ist das Resultat: Reader-Inhalte werden nicht zurückgegeben, wenn wir uns in einer (potentiellen) Listenseite befinden und umgekehrt. Ansonsten würden die Inhalte beider Module ausgegeben werden.
4. Liste und Reader in ein und denselben Artikel legen
Genau das tun. Fertig.
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm, ja ich hatte gehofft es kommt ne Erklärung.
Denn ich halte es nicht für ein Hexenwerk ... es sei denn ich hab es falsch verstanden.
Mein Vorgehen:
- Seite anlegen
- Nachrichtenarchiv anlegen mit Weiterleitung auf oben erstellte Seite
- Modul vom Typ "Nachrichtenleser" anlegen für oben erstelltes Nachrichtenarchiv
- Modul vom Typ "Nachrichtenliste" anlegen für oben erstelltes Nachrichtenarchiv
- Module in oben erstellte Seite einbinden (siehe Screenshot)
Zu betrachten z.B unter http://www.rtf-lueneburg.de/rtf_neui...lueneburg.html
Grüße, Cliff
Liste der Anhänge anzeigen (Anzahl: 1)
Mein Anliegen wird durch diese Seite vielleicht besser veranschaulicht.
Man startet mit den Highlights der News im Header ("News List").
Im Main befindet sich das "News Archive Menu".
Wählt man ein Jahr aus, erhält man auf der gleichen Seite die Beiträge aus dem ausgewählten Jahr (Durch das "News Archive").
Dieses "News Archive" verschwindet, sobald ein Beitrag ausgewählt wird (Wie vom System auch vorgesehen).
Was bleibt, ist das "News Archive Menu" (Unter dem News-Beitrag) und dieses soll durch den Hook ebenfalls ausgeblendet werden.
Alle Module befinden sich auf der gleichen Seite. ("News List" allerdings in einem separaten Artiekl, der im Bereich "Banner" angezeigt wird)