[TYPO3-german] Timer für tt_News
Markus Deckmann
Markus.Deckmann79 at web.de
Fri Apr 24 11:48:16 CEST 2009
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
More information about the TYPO3-german
mailing list