News Latest wird von Archive Menu beeinflusst

Ich habe auf einer Seite gleichzeitig die tt_news-Plugins List, Archive Menu (AMENU) und Latest eingebaut und dabei festgestellt, dass die Latest-Darstellung ebenfalls von der Auswahl im AMENU beeinflusst wird. Natürlich liegt es daran, dass im Code von tt_news keine große Unterscheidung gemacht wird zwischen List und Latest. Dieses Verhalten ist natürlich nicht immer gewüscht, so habe ich im Forum auf typo3.net einen Beitrag von 2006 gefunden, auf dem jemand genau das gleiche Problem hat, wie ich jetzt.
Die Funktion getSelectConf in der tt_news-Hauptklasse bastelt einfach die Where-Bedingungen für die Abfrage zusammen. Es wird gleich für List und Latest zusammengebaut. Eine Möglichkeit ist in der Klasse rumzupfuschen, was ich aber nicht gerne mache. Wer es doch machen möchte, braucht vor allen Ergänzungen des $selectConf[‚where‘], die archivedate oder datetime enthalten einfach die folgende If-Abfrage zu ergänzen:

if($this->theCode != 'LATEST') {

Eine elegantere Möglichkeit ist der selectConfHook, allerdings wird dieser erst aufgerufen, wenn alles zusammengebaut wurde. Um einen Hook zu nutzen, schreibt man erstmal eine eigene kleine Extension, Name ist egal. Dann registriert man den Hook in der ext_localconf.php:

$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['tt_news']['selectConfHook'][] = 
	'EXT:my_extension/class.myextension.php:user_myextension_hook';

Dann legt man eine Datei mit dem Namen class.myextension.php im Extension-Ordner an und darin die Klasse user_myextension_hook mit einer einzigen Funktion. Dieser Funktion wird das übergeordnete Objekt übergeben und die selectConf, die man dann manipulieren kann. Der einzige Weg, der mir einfallen ist, ist mit preg_replace. Mit diesem Code werden für Latest alle Zeitabhängigen Abfragen aus der selectConf rausgefiltert.

function processSelectConfHook($pObject, $selectConf) {
	if($pObject->theCode == 'LATEST') {
		$selectConf['where'] = preg_replace('/tt_news.archivedate.*?AND/i', '', $selectConf['where']);
		$selectConf['where'] = preg_replace('/tt_news.datetime.*?AND/i', '', $selectConf['where']);
		$selectConf['where'] = str_replace('((', '', $selectConf['where']);
	} 
	return $selectConf;
}

Kommentare sind geschlossen.