In tslib_pibase gibt es für Datenbankabfragen die Methode pi_exec_query(table,number,addwhere,..), wobei table die SQL-Tabelle ist, auf der die Abfrage auszuführen ist, number==1 nur die Anzahl Ergebnisse und number==0 die Ergebnisse selbst zurückliefert und addwhere eine anzuhängende WHERE-Klausel ist. Der Aufruf sieht also etwa so aus – angenommen wir befinden uns in einer Klasse, die tslib_pibase erweitert:
$alleergebnisse=$this->pi_exec_query( “tx_myextension_funnydb”,0,$addwhere);
Ich musste feststellen, dass $alleergbnisse leider nicht wirklich alle Ergebnisse enthält. Die Methode greift auf die Variable $conf zu, um die Abfrage weiter anzupassen. Zum Beispiel:
$this->conf[‘pidList’]=$startingpoint;
$this->conf[‘recursive’]=$recursives;
Dann werden nur Elemente ausgespuckt, die eine Page-ID $startingpoint haben oder mit einer Rekursivität von $recursives unterhalb dieser liegen. In meinem Fall ist der Startingpoint ein SysFolder mit Veranstaltungseinträgen, die darunterliegend noch in zwei weiteren Sysfoldern kategorisiert sind.
Außerdem gibt pi_exec_query nicht beliebig viele Resultate. Es ist eigentlich dazu gedacht, eine Abfrage für seitenweise Ausgabe zu erzeugen. Die maximale Anzahl Resultate wird in
$this->internal[‘results_at_a_time’] = 10000;
gespeichert. Da ich vermutlich niemals mehr als 10000 Einträge haben werde, genügte mir das an der Stelle, da die Steuerung des Startingpoint und der Rekursivität so recht einfach gelöst ist. Wünscht man eine explizite Abfragesteuerung bietet sich wahrscheinlich die Methode $GLOBALS[‘TYPO3_DB’]->SELECTquery(…) eher an.
