Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten Ansicht
  #1  
Alt 19.03.08, 14:17
Forum Stammgast
 
Registriert seit: 01.09.06
Ort: Grafenwöhr
Alter: 31
Beiträge: 172
Gelöst - Pagebrowser in eigener Extension

Hallo,

in meiner ersten Extension sollen PDF Dokumente untereinander aufgelistet werden. Per TypoScript soll eine Variable gesetzt werden, welche die Datensätze pro Seite begrenzt, und dann einen PageBrowser einblendet.

Meine Funktion sieht folgendermaßen aus:

PHP-Code:
function aktuell($conf) {
        
//unser Subpart
        
$subpart=$this->cObj->getSubpart($this->template,'###TEMPLATEAKTUELL###'); 
        
//eine einzelne Reihe
        
$singlerow=$this->cObj->getSubpart($subpart,'###AKTUELL###'); 
        
        
//Anzahl der Einträge in der Ansicht Aktuell (aus TypoScript auslesen)
        
$aktulimit=$this->conf['limitActualView'];
        
//Anzahl der Einträge pro Seite (aus TypoScript auslesen)
        
$this->internal['results_at_a_time'] = $this->conf['limitPageBrowser'];
               
         
//Timestamp
         
$aktuell=time();      
        
//Datenbank Abfrage
        
$res=$GLOBALS['TYPO3_DB']->exec_SELECTquery(
        
'*',   #select
        
'tx_akpdfarchiv_document'#from
        
'deleted=0 and pid='.$this->id.' and starttime < '.$aktuell,  #where 
        
$groupBy='',
        
$orderBy='crdate asc',
        
$limit=$aktulimit);
        
        
//Pagewbrowser Settings
        
$this->internal['res_count'] = $GLOBALS['TYPO3_DB']->sql_num_rows($res);
        
        
//Anzahl der Einträge pro Seite die gelistet werden sollen
        
if(empty($this->piVars['pointer'])) $this->piVars['pointer'] = 0;
                          
        
//Wenn Einträge in der Datenbank vorhanden
        
if($res) {
            
$liste='';
            
$break=0;
            while(
$row=$GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))
            {
                
//Datum formatieren
                    
$datum strftime('%e. %B %Y',$row['starttime']);
                
                
//Dateilink erzeugen
                // Verbindung zur Datei
                    
$pdfdatei "uploads/tx_akpdfarchiv/".$row['pdffile'];   
                
//PDF Link erzeugen 
                    
$pdflink=$this->cObj->getTypoLink($row['titel'],$pdfdatei,$urlParameters='',$target='_blank');
                
//Dateigröße Bestimmen
                
$size filesize($pdfdatei);
                
$size=$this->formatsize($size);
                
                
$markerArray['###DATUM###']=$datum;
                
$markerArray['###DATEILINK###']=$pdflink;
                
$markerArray['###FILESIZE###']=$size;
                
$liste .= $this->cObj->substituteMarkerArrayCached($singlerow,$markerArray);
                
            }
            
$subpartArray['###AKTUELL###']=$liste;
        } else {
            return 
$this->pi_getLL('nodata');
        }
 
                
//Wenn Anzahl der Dokumente Größer ist, als Einträge Pro seite im Pagebrowser, dann zeigen den Pagebrowser an
                
if($this->internal['res_count'] > $this->internal['results_at_a_time'] )
                {
                  return 
$this->cObj->substituteMarkerArrayCached($subpart,$markerArray,$subpartArray,array()).$this->pi_list_browseresults();
                }
                else
                {
                  
//Anzeige ohne PageBrowser
                  
return $this->cObj->substituteMarkerArrayCached($subpart,$markerArray,$subpartArray,array());
                }     
 
    } 
Der Pagebrowser wird bereits angezeigt, wenn die Anzahl der Einträge überschritten wird.

Die Anzahl der Datensätze wird aber nicht auf die einzelnen Seiten aufgeteilt.
Es erscheinen also auf allen Seiten alle Datensätze. Wie kann ich die Datensätze auf die einzelnen Seiten aufteilen?

MFG Anderl

Geändert von Anderl (20.03.08 um 15:07 Uhr).
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #2  
Alt 19.03.08, 17:57
Forum Stammgast
 
Registriert seit: 01.09.06
Ort: Grafenwöhr
Alter: 31
Beiträge: 172

Hallo,

ich bin schon ein Stück weiter gekommen.

Hier wird das Limit für die DB Abfrage gesetzt
PHP-Code:
//Versorgung der Links mit Pointer
          
if(empty($this->piVars['pointer']))
          {
            
$this->piVars['pointer'] = 0;
          }
          
//Aktuelles Limit für Pagebrowser
          
$limit $this->piVars['pointer'].','.$this->internal['results_at_a_time']; 
Hier wird die Anzahl der Einträge bestimmt(ohne Limit für Pagebrowser)
PHP-Code:
//Anzahl der Einträge
        
$this->internal['res_count'] = $GLOBALS['TYPO3_DB']->sql_num_rows($res); 
So sieht die komplette Funktion im Moment aus:
PHP-Code:
function aktuell($conf) {
        
//unser Subpart
        
$subpart=$this->cObj->getSubpart($this->template,'###TEMPLATEAKTUELL###'); 
        
//eine einzelne Reihe
        
$singlerow=$this->cObj->getSubpart($subpart,'###AKTUELL###'); 
        
        
//Timestamp
        
$aktuell=time();
        
        
//Pagewbrowser Settings
        //Anzahl der Datensätze
       
$res=$GLOBALS['TYPO3_DB']->exec_SELECTquery(
        
'*',   #select
        
'tx_akpdfarchiv_document'#from
        
'deleted=0 and pid='.$this->id.' and starttime < '.$aktuell,  #where 
        
$groupBy='',
        
$orderBy='',
        
$limit='');
        
        
//Anzahl der Einträge
        
$this->internal['res_count'] = $GLOBALS['TYPO3_DB']->sql_num_rows($res);
        
        
//Anzahl der Einträge in der Ansicht Aktuell (aus TypoScript auslesen)
        
$aktulimit=$this->conf['limitActualView'];
        
//Anzahl der Einträge pro Seite (aus TypoScript auslesen)
        
$this->internal['results_at_a_time'] = $this->conf['limitPageBrowser'];
        
        
//Wenn Pagebrowser Limit kleiner ist als Aktuell Limit, dann verwende Pagebrowserlimit
        
if($this->internal['results_at_a_time'] < $aktulimit)
        {
          
//Einträge auf einzelne Seiten aufteilen
          
if(empty($this->piVars['pointer']))
          {
            
$this->piVars['pointer'] = 0;
          }
          
//Aktuelles Limit für Pagebrowser
          
$limit $this->piVars['pointer'].','.$this->internal['results_at_a_time'];  
        }
        else
        {
          
$limit=$aktulimit;
        }
        
        
//Datenbank Abfrage
        
$res=$GLOBALS['TYPO3_DB']->exec_SELECTquery(
        
'*',   #select
        
'tx_akpdfarchiv_document'#from
        
'deleted=0 and pid='.$this->id.' and starttime < '.$aktuell,  #where 
        
$groupBy='',
        
$orderBy='starttime desc',
        
$limit);

        
//Wenn Einträge in der Datenbank vorhanden
        
if($res) {
            
$liste='';
           
            while(
$row=$GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))
            {
                
//Datum formatieren
                    
$datum strftime('%e. %B %Y',$row['starttime']);
                
                
//Dateilink erzeugen
                // Verbindung zur Datei
                    
$pdfdatei "uploads/tx_akpdfarchiv/".$row['pdffile'];   
                
//PDF Link erzeugen 
                    
$pdflink=$this->cObj->getTypoLink($row['titel'],$pdfdatei,$urlParameters='',$target='_blank');
                
//Dateigröße Bestimmen
                
$size filesize($pdfdatei);
                
$size=$this->formatsize($size);
                
                
$markerArray['###DATUM###']=$datum;
                
$markerArray['###DATEILINK###']=$pdflink;
                
$markerArray['###FILESIZE###']=$size;
                
$liste .= $this->cObj->substituteMarkerArrayCached($singlerow,$markerArray);
                
            }
            
$subpartArray['###AKTUELL###']=$liste;
        } else {
            return 
$this->pi_getLL('nodata');
        }
 
                
//Wenn Anzahl der Dokumente Größer ist, als Einträge Pro seite im Pagebrowser, dann zeigen den Pagebrowser an
                
if(($this->internal['res_count'] > $this->internal['results_at_a_time']) && ($this->internal['results_at_a_time'] < $aktulimit))
                {
                  return 
$this->cObj->substituteMarkerArrayCached($subpart,$markerArray,$subpartArray,array()).$this->pi_list_browseresults();
                }
                else
                {
                  
//Anzeige ohne PageBrowser
                  
return $this->cObj->substituteMarkerArrayCached($subpart,$markerArray,$subpartArray,array());
                }     
 
    } 
Jetzt kann ich zwar zwischen den einzelnen Seiten hin- und herklicken, habe dafür aber ein anderes Problem:

Der Letzte Eintrag der vorherigen Seite wird als erster Eintrag auf der darauffolgenden Seite angezeigt. Auf der letzten Seite fehlt dafür aber der letzte Eintrag??

MFG Anderl
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #3  
Alt 20.03.08, 15:07
Forum Stammgast
 
Registriert seit: 01.09.06
Ort: Grafenwöhr
Alter: 31
Beiträge: 172
Blinzeln

Hallo,

es funktioniert. Das Problem lag daran, dass der Start des Limit nicht richtig gesetzt wurde.

Der Start muss so gesetzt werden:
PHP-Code:
 $limitstart $this->piVars['pointer']*$this->internal['results_at_a_time']; 
Für Intressierte nochmals die ganze Funktion:

PHP-Code:
function aktuell($conf) {
        
//unser Subpart
        
$subpart=$this->cObj->getSubpart($this->template,'###TEMPLATEAKTUELL###'); 
        
//eine einzelne Reihe
        
$singlerow=$this->cObj->getSubpart($subpart,'###AKTUELL###'); 
        
        
//Timestamp
        
$timestamp=time();
        
        
//Tage in Sekunden umrechnen und dann zurückrechnen 1 Tag = 86400 sec
        
$tage=$this->conf['daysBeforeStart'];
        
$aktuell mktime000date('n'), date('j') + $tagedate('Y') ); 
        
        
//Anzahl der Einträge in der Ansicht Aktuell (aus TypoScript auslesen)
        
$aktulimit=$this->conf['limitActualView'];
        
        
//Pagewbrowser Settings
        //Anzahl der Datensätze
       
$res=$GLOBALS['TYPO3_DB']->exec_SELECTquery(
        
'*',   #select
        
'tx_akpdfarchiv_document'#from
        
'deleted=0 and pid='.$this->id.' and starttime < '.$aktuell,  #where 
        
$groupBy='',
        
$orderBy='',
        
$limit=$aktulimit);
        
        
//Anzahl der Einträge
        
$this->internal['res_count'] = $GLOBALS['TYPO3_DB']->sql_num_rows($res);
        
        
//Anzahl der Einträge pro Seite (aus TypoScript auslesen)
        
$this->internal['results_at_a_time'] = $this->conf['limitPageBrowser'];
        
        
//Wenn Pagebrowser Limit kleiner ist als Aktuell Limit, dann verwende Pagebrowserlimit
        
if($this->internal['results_at_a_time'] < $aktulimit)
        {
          
//Einträge auf einzelne Seiten aufteilen
          
if(empty($this->piVars['pointer']))
          {
            
$this->piVars['pointer'] = 0;
          }
          
//Aktuelles Limit für Pagebrowser $start=$start*Anzahl,$Anzahl=$Anzahl
          
$limitstart $this->piVars['pointer']*$this->internal['results_at_a_time'];
          
//Trenner zwischen Start und Anzahl
          
$limit$limitstart.',';
          
          
//Anzahl der Seiten berechnen und runden
          
$seitenanz=ceil($aktulimit/$this->internal['results_at_a_time']);
          
//Pointer um 1 erhöhen, da er bei 0 beginnt
          
$seitenpointer=$this->piVars['pointer']+1;
          
          
//Wenn letzte Seite, dann begrenze Ausgabe
          
if($seitenpointer == $seitenanz)
          { 
            
//Bestimme restanzahl an Einträgen
            
$limit.=$aktulimit-$limitstart;
            
          }
          else
          {
            
$limit.=$this->internal['results_at_a_time'];
          }
        }
        else
        {
          
$limit=$aktulimit;
        }
        
        
//Datenbank Abfrage
        
$res=$GLOBALS['TYPO3_DB']->exec_SELECTquery(
        
'*',   #select
        
'tx_akpdfarchiv_document'#from
        
'deleted=0 and pid='.$this->id.' and starttime < '.$aktuell,  #where 
        
$groupBy='',
        
$orderBy='starttime desc',
        
$limit);
        
        
//Wenn Einträge in der Datenbank vorhanden
        
if($res) {
            
$liste='';
           
            while(
$row=$GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))
            {
                
//Datum formatieren
                    
$datum strftime('%e. %B %Y',$row['starttime']);
                
//Dateilink erzeugen
                // Verbindung zur Datei
                    
$pdfdatei "uploads/tx_akpdfarchiv/".$row['pdffile'];   
                
//PDF Link erzeugen 
                    
$pdflink=$this->cObj->getTypoLink($row['titel'],$pdfdatei,$urlParameters='',$target='_blank');
                
//Dateigröße Bestimmen
                
$size filesize($pdfdatei);
                
$size=$this->formatsize($size);
                
                
$markerArray['###DATUM###']=$datum;
                
$markerArray['###DATEILINK###']=$pdflink;
                
$markerArray['###FILESIZE###']=$size;
                
$liste .= $this->cObj->substituteMarkerArrayCached($singlerow,$markerArray);
                
            }
            
$subpartArray['###AKTUELL###']=$liste;
        } else {
            return 
$this->pi_getLL('nodata');
        }
 
                
//Wenn Anzahl der Dokumente Größer ist, als Einträge Pro seite im Pagebrowser, dann zeigen den Pagebrowser an
                
if(($this->internal['res_count'] > $this->internal['results_at_a_time']) && ($this->internal['results_at_a_time'] < $aktulimit))
                {
                  return 
$this->cObj->substituteMarkerArrayCached($subpart,$markerArray,$subpartArray,array()).$this->pi_list_browseresults();
                }
                else
                {
                  
//Anzeige ohne PageBrowser
                  
return $this->cObj->substituteMarkerArrayCached($subpart,$markerArray,$subpartArray,array());
                }     
 
    } 
MFG Anderl
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #4  
Alt 28.04.08, 22:03
Forum Zuschauer
 
Registriert seit: 28.04.08
Beiträge: 2
Unglücklich pahebrowser un dzusätzliche url variablen

Hallo,

ich habe diese Möglichkeit den pagebrowser in die eigene Extension einzubinden genutz, allerdings habe ich ein Problem.

In meiner Extension besteht die Möglichkeit die Datensätze nach dem Alphabet zu filtern. Es wird also ein zusätzlicher wert (a bis z) in einer URL-Variable weitergegeben. Soweit funktioniert das alles, doch wenn man nach der Filterung nach dem abc wieder den Pagebrowser benutzt, wird dort im Link nicht die URL Variable mit dem abc Wert weitergegeben und so werden wieder alle Ergebnisse angezeigt.

Wie kann ich dem Pagebrowser sagen, dass er die URL Variable mit in die Links des pagebrowsers übernimmt?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #5  
Alt 30.04.08, 07:22
Forum Stammgast
 
Registriert seit: 01.09.06
Ort: Grafenwöhr
Alter: 31
Beiträge: 172

Hallo,

bei mir können die Einträge nach Jahr gefiltert werden. Du musst natürlich den Filterwert auch mit übergeben.

Bei mir sind die Übergabewerte pointer=1 und natürlich das sortjahr=2007

Also es scheint so dass du vergessen hast die Variable auch über dem Pagebrowser zu übergeben.

MFG Anderl

Geändert von Anderl (30.04.08 um 10:05 Uhr).
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #6  
Alt 30.04.08, 10:05
Forum Zuschauer
 
Registriert seit: 28.04.08
Beiträge: 2

Danke für deine Antwort, aber wie gibtst du denn den Wert weiter? Ich weiß ja nicht wie ich den mit an den Link der Pagebrowser-Seiten hängen kann.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #7  
Alt 10.05.08, 16:34
Forum Stammgast
 
Registriert seit: 01.09.06
Ort: Grafenwöhr
Alter: 31
Beiträge: 172

Hallo,

das ist der Code für die Rückgabe der Daten mit Pagebrowser:

PHP-Code:
 return $this->cObj->substituteMarkerArrayCached($subpart,$markerArray,$subpartArray,array()).$this->pi_list_browseresults(); 
MFG Anderl
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten