[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