Zum Inhalt springen

Fehler im News-Archiv

Erstellt am 23. Mai 2004 · 3 Antworten · letzte Antwort am 10. Dezember 2004

Tags: tt_news, Frage

Unbekannter Benutzer ·

Hallo allerseits,

nach dem ich mich mit der indexed search extension erheblich geärgert habe ist die news extension eine wahre Freude.

Bis auf einen Fehler, den zu beheben mir nicht gelingen will:

In der Archiv-Ansicht (AMENU) werden mir Zeiträume zur Auswahl angeboten, zusammen mit einer Anzeige wie viele Artikel in dem Zeitraum veröffentlicht wurden. So weit so gut. Zum Testen habe ich mir ein paar News Einträge für Februar und März mit entsprechendem Archivierungsdatum angelegt.

Das Problem: es werden mir in der Übersicht immer nur die Artikel des ersten Monats mit korrekten Einträgen angezeigt (z.B. "Februar - 1 Artikel"). März zeigt "0 Artikel", ein Klick auf März ruft jedoch die 2 darin enthaltenen Einträge auf. Verstecke ich die Februar-News ist der März wieder korrekt.

Wer weiss, woran es liegen könnte?

Vielen Dank schon mal!
Niki

P.S.: Archivdatum ist in den News korrekt gesetzt, News sind auch nicht auf "versteckt" geschalten. Das Newsarchiv ist als Inhaltselement mit Code AMENU eingebunden.

jweiland ·

Scheint ein Bug in der Extension zu sein, da gab es kürzlich einen Beitrag (mit Lösung) auf der engl. Newsliste

Jochen Weiland

Unbekannter Benutzer · · Beste Antwort

Danke für den Tip, die Lösung auf der englischen Newslist war zwar falsch, aber die Fehlerquelle war korrekt ermittelt.

Bei der von der Newslist angebotenen Lösung werden alle archivierten News ausgegeben, auch die deren Archivdatum in der Zukunft liegt.

So funktionierts richtig (ab Zeile 173 der pi/class.tx_ttnews.php ersetzen):

	/**
	 * News archive menu
	 */
	function news_archiveMenu()	{
		$this->arcExclusive=1;
		$selectConf = $this->getSelectConf('',1);
		$tmpSelectConf["where"] = $selectConf["where"];

			// Finding maximum and minimum values:
		$selectConf['selectFields'] = 'max(datetime) as maxval, min(datetime) as minval';
		$res = $this->cObj->exec_getQuery("tt_news",$selectConf);
		$row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);

		if ($row["minval"])	{
			$dateArr = array();
			$arcMode = $this->conf["archiveMode"] ? $this->conf["archiveMode"] : "month";
			$c=0;
			do {
				switch($arcMode)	{
					case "month":
						$theDate = mktime (0,0,0,date("m",$row["minval"])+$c,1,date("Y",$row["minval"]));
					break;
					case "quarter":
						$theDate = mktime (0,0,0,floor(date("m",$row["minval"])/3)+1+(3*$c),1,date("Y",$row["minval"]));
					break;
					case "year":
						$theDate = mktime (0,0,0,1,1,date("Y",$row["minval"])+$c);
					break;
				}
				$dateArr[]=$theDate;
				$c++;
				if ($c>1000)	break;
			} while ($theDate<$GLOBALS["SIM_EXEC_TIME"]);
	//		array_pop($dateArr);
	
			reset($dateArr);
			$periodAccum=array();


			while(list($k,$v)=each($dateArr))	{
				if (!isset($dateArr[$k+1]))	{break;}
				$periodInfo=array();
				$periodInfo["start"] = $dateArr[$k];
				$periodInfo["stop"] = $dateArr[$k+1]-1;
				$periodInfo["HRstart"] = date("d-m-Y",$periodInfo["start"]);
				$periodInfo["HRstop"] = date("d-m-Y",$periodInfo["stop"]);
				$periodInfo["quarter"] = floor(date("m",$dateArr[$k])/3)+1;
	
					// FInding maximum and minimum values:
				$selectConf['selectFields'] = 'count(*)';
				$selectConf['where'] = $tmpSelectConf["where"]." AND datetime>=".$periodInfo["start"]." AND datetime<".$periodInfo["stop"];
				//print_r($selectConf);
				$res = $this->cObj->exec_getQuery("tt_news",$selectConf);
				$row = $GLOBALS['TYPO3_DB']->sql_fetch_row($res);
				$periodInfo["count"]=$row[0];
				
				if (!$this->conf["archiveMenuNoEmpty"] || $periodInfo["count"])	{
					$periodAccum[] = $periodInfo;
				}
			}

Aber Achtung, wir haben hier nur einen workaround gemacht der bei uns so funktioniert, richtig sauber gelöst ist es jedoch nicht.

Viele Grüße,
Niki

njutn ·

Der Thread ist zwar schon ewig alt, hat mir aber bei was anderem geholfen (für die, die das Problem auch haben):

Bei mir hat das Plugin im Archiv keine News angezeigt, die im aktuellen Monat erstellt UND archiviert wurden. Verwendet man den Workaround, wie im vorherigen Beitrag, funzt auch das. Wichtig sind nur die Zeilen:

$tmpSelectConf["where"] = $selectConf["where"];

...

$selectConf['where'] = $tmpSelectConf["where"]." AND datetime>=".$periodInfo["start"]." AND datetime<".$periodInfo["stop"];

Den Rest kann man so lassen... bei mir zumindest ;-)