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