[TYPO3-german] Timer für tt_News

Jörg Petersson mail at emedcd.de
Tue Apr 28 11:53:29 CEST 2009


Markus Deckmann schrieb:
> Hi Jörg,
> 
>> das scheint mir eine interessante Idee zu sein. Ich habe zwar nicht 
>> sehr viel Erfahrung mit Typo3-Programmierung, mir leuchtet das Prinzip 
>> aber ein und dein Skript kann mir sicherlich weiterhelfen. Ich werde 
>> mal einen Versuch unternehmen und bedanke mich sehr.
> 
> Der Ablauf ist eigentlich ganz einfach um so etwas zu erreichen. Ich 
> versuche in Kürze mal das ganze ein bisschen zu erklären:
> 
> 1. Zusätzliche Codes hinzufügen
> -------------------------------
> Um in der Auswahl von tt_news neue CODES hinzuzufügen brauchst du die 
> folgende Zeile:
> 
> $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['tt_news']['what_to_display'][] = 
> array(0 => "LIST_BY_AUTHOR", 1 => "LIST_BY_AUTHOR");
> 
> Das fügt z.B. einen neuen CODE mit der Bezeichnung "LIST_BY_AUTHOR" 
> hinzu. Es dürfen in dem Namen aber keine Umlaute oder Leerzeichen 
> enthalten sein, der Einheitlichkeit wegen solltest du außerdem die 
> Bezeichnung groß schreiben.
> 
> Wenn du mehrere hinzufügen willst, einfach die Zeile entsprechend 
> wiederholen:
> 
> $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['tt_news']['what_to_display'][] = 
> array(0 => "LIST_BY_AUTHOR", 1 => "LIST_BY_AUTHOR");
> $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['tt_news']['what_to_display'][] = 
> array(0 => "LIST_BY_TEAM", 1 => "LIST_BY_TEAM");
> 
> Damit hättest du zwei neue CODES im tt_news-Plugin zur Auswahl die du zu 
> einem späteren Zeitpunkt verarbeiten kannst.
> 
> 2. Code für zusätzliche DB-Abfrage
> ----------------------------------
> Um die neu angelegten Codes verarbeiten zu können brauchst du jetzt noch 
> einen zweiten Hook in die tt_news-Klasse. Diesen initialisierst du mit 
> der folgenden Zeile:
> 
> $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['tt_news']['extraCodesHook'][] = 
> 'EXT:{ext_key}/class.tx_news_extend.php:tx_news_extend';
> 
> {ext_key} ersetzt du dabei gegen den Namen deiner eigenen Extension die 
> du dir über den Kickstarter vor Schritt 1 erstellt hast. Solltest du 
> diese Änderung direkt in einer bestehenden Extension durchführen muss 
> {ext_key} entsprechend diesen Namen besitzen.
> 
> Als PHP-Klassenname verwendest du eine von dir gewählte Datei mit einer 
> herkömmlichen Klassen-Definition und setzt den Namen der Klasse (im 
> Normalfall der selbe wie die Datei selbst ohne class. und .php) hinter 
> den Doppelpunkt in obiger Initialisierung.
> 
> Dadurch wird beim Aufruf einer Seite mit tt_news-Plugin immer diese 
> Datei und diese Klasse aufgerufen und dort die folgende Funktion:
> 
> function extraCodesProcessor($newsObject) {}
> 
> Diese Funktion sorgt dafür das man zusätzliche Hooks in tt_news 
> verarbeiten kann und erlaubt dir deine zusätzlichen CODES aus Schritt 1 
> zu verarbeiten. In deine neu erstellte Klasse muss also die folgende 
> Code-Definition inkl. des Parameters. Der Name ist dabei egal, es muss 
> allerdings ein Parameter vorhanden sein an den der Hook von tt_news 
> seine Werte übergeben kann. In dieser Funktion erhältst du ein Objekt 
> vom Typ tt_news, was später evtl. für die Datenbankabfragen noch 
> nützlich sein kann.
> 
> Innerhalb der Funktion kannst du jetzt ziemlich einfach über folgendes 
> Konstrukt deine Codes verarbeiten:
> 
> switch ($newsObject->theCode) {
>   case 'LIST_BY_AUTHOR':
>     $content .= $newsObject->displayList();
>     break;
>   default:
>     $content .= "CODE unbekannt!";
>     break;
> }
> 
> Für jeden neuen Code kannst du über $newsObject->theCode und einen 
> entsprechenden CASE-Fall deinen speziellen Quellcode für die 
> Verarbeitung angeben.
> 
> 3. DB-Abfrage absetzen
> ----------------------
> In deinem Fall wirst du um eine kleine DB-Abfrage der Datensätze nicht 
> rumkommen, die richtigen Felder usw. kannst du dir ja über phpMyAdmin 
> raussuchen.
> 
> Über folgende Zeile kannst du eine Abfrage an die Datenbank absetzen und 
> erhältst als Ergebnis die Datensätze die auf diese Anfrage passen.
> 
> $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery("*", "tt_news_cat_mm", " 
> uid_foreign=".$cat_uid[0]);
> 
> Ähnlich wie bei PHP kannst du das Resultat dann mit folgendem Konstrukt 
> für jede einzelne Ergebniszeile verarbeiten:
> 
> while ($rows = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
>   ...
> }
> 
> Innerhalb der while-Schleife baust du dir jetzt deine Liste aus 
> Datensätzen zusammen die bei der Auswahl nicht erscheinen dürfen. Dabei 
> ist bspw. im Plugin eingestellt das alle Datensätze angezeigt werden 
> sollen welche die Kategorie "Jeden Montag" enthalten. Das gibt in beiden 
> Ansichten (List- und Detail-) eine Menge an Elementen die angezeigt 
> werden sollen, bis jetzt noch völlig unabhängig davon ob es Montag ist 
> oder nicht.
> 
> Durch den zusätzlichen Code und die Datenbankabfrage kannst du jetzt 
> deine entsprechenden Anforderungen prüfen und darauf basierend die Liste 
> an Elementen aus der Datenbank auslesen die zwar zu der gewählten 
> Kategorie passen allerdings aufgrund deiner anderen Kriterien doch nicht 
> dargestellt werden sollen. In deinem Fall alle Elemente die zwar der 
> Kategorie angehören an dem heutigen Tag aber nicht passen weil der 
> falsche Tag ist.
> 
> Nachdem du deine Ausschlussliste generiert hast kannst du über den 
> folgenden Aufruf die List- Ansicht der tt_news-Klasse aufrufen und als 
> Parameter deine Ausschlussliste übergeben. Damit erhältst du die 
> eingeschränkte Liste als Ausgabe im FE und dürftest damit dann bspw. 
> auch solche Sachen wie "Jeden Montag" auch wirklich nur jeden Montag sehen.
> 
> $content .= $newsObject->displayList($excludeListSeperated);
> 
> Ganz am Ende der Funktion gibst du mit folgender Zeile den generierten 
> Content wieder an tt_news zurück und tt_news generiert wie gewohnt über 
> das eingefügte Plugin und einen der neuen CODES die LIST-Ansicht.
> 
> return $content;
> 
> Ich hoffe die Ausführung hilft einigen hier die ähnliches vorhaben oder 
> ebenfalls tt_news aus irgendeinem Grund um CODES erweitern wollen.
> 
> Ciao Markus

Lieber Markus,

ganz herzlichen Dank für diese ausführliche Beschreibung. Ich werde mal 
ausprobieren, wie weit ich komme.

Tschüss, Jörg


More information about the TYPO3-german mailing list