Zum Inhalt springen

Pagebrowser bringt Reihenfolge durcheinander

Erstellt am 4. Mai 2006 · 4 Antworten · letzte Antwort am 30. August 2006

Tags: tt_news, Frage

cbatik ·

Hallo!

Ich verwende auf meiner News-Seite die LATEST Darstellung, um die 5 neuesten Beiträge darzustellen. Darunter befindet sich ein Link zu einer Seite mit der LIST Darstellung. Mittels dieser Einstellung werden alle weiteren News (also beginnend mit dem 6t neuesten Beitrag) dargestellt. Das stelle ich beim Content-Element bei "Sonstige Einstellungen / ListStartID" ein. Das ganze funktioniert auch so weit.

Aktiviere ich allerdings den Pagebrowser für die LIST Ansicht, wird im Pagebrowser ab Seite 2 mit dem News-Beitrag Nr. 5 begonnen und bis zum letzten Beitrag alle News aufgelistet.

Was mir aufällt: Es werden eigentlich alle Beiträge dargestellt, begonnen wird halt mit dem 6ten, und ab Seite 2 wird eben wie gesagt mit dem 5t neuesten Beiträg begonnen und mit dann allen weiteren fortgefahren.

Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken.
Gibt es dazu schon Erfahrungen bzw. Lösungen?

Danke
Christoph

Tastendrücker ·

So ärgerlich das ist:

Zitat Rupert Germann (Autor tt_news):

as I wrote in the manual: the pagebrowser is not - and will probably never be - compatible with the listStartId feature."

Gefunden im TYPO3-Bugtracker unter http://bugs.typo3.org/view.php?id=2460

Wenn jemandem zu dem Thema was einfällt: Immer her damit ;-)

Gruß
Sven

planc ·

Das Problem ist, dass in der tx_ttnews.php dem Limit-Element der Abfrage ab der zweiten Seite der Wert der Start-Id nicht übergeben wird.
Wer also die tx_ttnews.php ändern möchte, kann folgendes tun:

in der function getListContent:

// List start ID
if (($theCode == 'LIST' || $theCode == 'LATEST') && $this->config['listStartId'] && !$this->piVars[$pointerName] && !$this->piVars['cat']) {
$selectConf['begin'] = $this->config['listStartId'];
}

Hier die List-Bedingung herausnehmen. Also:

if (($theCode == 'LATEST') && $this->config['listStartId'] && !$this->piVars[$pointerName] && !$this->piVars['cat']) {

Für die Liste eine eigene Bedingung einfügen:

if ($theCode == 'LIST' && $this->config['listStartId'] ) {
$start = $this->config['listStartId'];
$start--;
if ($this->piVars[$pointerName]) {		
$selectConf['begin'] = ($this->piVars[$pointerName] * $this->config['limit']) + start;
} else {
$selectConf['begin'] = $start;
}
}

Abschließend muss noch die Anzeige der Browserergebnisse angepasst werden, z.B. in der function makePageBrowser (Standard) so:

$count=($this->internal['res_count'])-$this->config['listStartId'];

und

<!--
List browsing box:
-->
<div'.$this->pi_classParam('browsebox').'>'.
($showResultCount ? '
<p>'.
($this->internal['res_count'] ?
sprintf(
str_replace('###SPAN_BEGIN###','<span'.$this->pi_classParam('browsebox-strong').'>',$this->pi_getLL('pi_list_browseresults_displays','Displaying results ###SPAN_BEGIN###%s to %s</span> out of ###SPAN_BEGIN###%s</span>')),
$this->internal['res_count'] > 0 ? $pR1 : 0,
min(array($this->internal['res_count'],$pR2)),
$this->internal['res_count']

//Statt der letzten Zeile dies
($this->internal['res_count'])-($this->config['listStartId'])+1