Zum Inhalt springen

PID"s" auslesen

Erstellt am 3. Oktober 2007 · 4 Antworten · letzte Antwort am 4. Oktober 2007

Tags: Frage

ManuP ·

Hi alle miteinander,

ich sitze gerade an einer Extension und bekomme das mit dem Auslesen der PIDs bei Ausgangspunkt nicht hin.
Ich programmiere nicht mit Flexforms sondern nach der altbewährten Variante.
Bis jetzt liest er nur einen Ordner aus... sobald ich bei Startingpoint zwei Ordner angebe, zeigt er nichts mehr an.
Vielleicht kann mir jemand helfen. Danke.

Und hier der Code:

#Ausgangspunkt der Seite festlegen ;)		
$this->config["pid"] = trim($this->cObj->stdWrap($this->conf["pid"],$this->conf["pid."]));
$this->config["pid"] = $this->config["pid"] ? implode(t3lib_div::intExplode(",",$this->config["pid"]),",") : $this->cObj->data["pages"];
list($pid) = explode(",",$this->config["pid"]);
$this->pid = $pid;
#Mehrere SysOrdner durchforsten
$pid = $pid?$pid : trim($this->cObj->stdWrap($this->conf['pid'], $this->conf['pid.']));
$pid = $pid ? implode(t3lib_div::intExplode(',', $pid), ','):
#t3lib_div::debug($GLOBALS["TSFE"]->id);
t3lib_div::debug($pid);
$query = "SELECT * FROM tx_tabelle WHERE pid IN (".$pid.") AND sys_language_uid='".$GLOBALS['TSFE']->config['config']['sys_language_uid']."' ORDER BY sorting";
$res = mysql(TYPO3_db,$query);
$out=array();
while($row = @mysql_fetch_assoc($res)) {
 $out[]=$row;
}
ThBodi ·

Typo3 bietet von "Haus aus" eine entsprechende Funktion an:

$pages = $this->pi_getPidList($this->cObj->data['pages'],$this->cObj->data['recursive']);

$pages beinhaltet dann eine kommagetrennte Liste, die die Seiten im "Ausgangspunkt" sowie, wenn entsprechend eingestellt, deren Unterseiten enthält. Sollten dortkeine Seiten angegeben sein, wird die aktuelle pageid zurückgegeben. Das Resultat kann also direkt in einer Datenbankabfrage alà 'pid IN('.$pages.')' verwendet werden.

ManuP ·

Hi ThBodi,

diese Funktion kannte ich schon.
Hatte sie auch ausprobiert... und trotzdem hatte es nicht funktioniert.
Jetzt weiß ich wo der Fehler lag.
Ich hatte immer noch die Abfrage der Sprach-ID drin... also anzeigen, wenn ALL (L=-1) gewählt ist. Das war in falscher Syntax und hat alles zerschossen.

So war es vorher:

$pages = $this->pi_getPidList($this->cObj->data['pages'],$this->cObj->data['recursive']);
$query = "SELECT * FROM tx_mpfaq_list WHERE pid IN (".$pages.") ".$this->cObj->enableFields('tx_mpfaq_list')." AND sys_language_uid='".$GLOBALS['TSFE']->config['config']['sys_language_uid']."' OR sys_language_uid='-1' ORDER BY sorting";

... und so ist es besser (mit den Klammern).

$pages = $this->pi_getPidList($this->cObj->data['pages'],$this->cObj->data['recursive']);
$query = "SELECT * FROM tx_mpfaq_list WHERE pid IN (".$pages.") ".$this->cObj->enableFields('tx_mpfaq_list')." AND (sys_language_uid='".$GLOBALS['TSFE']->config['config']['sys_language_uid']."' OR sys_language_uid='-1') ORDER BY sorting";

Aber ich habe halt immer noch das Problem mit der Sprache:
#68739

Danke dir trotzdem 😃

Ciao der Manuel

ManuP ·

Hi ThBodi,

es funktioniert immer noch nicht ganz.
Ich habe zwei Funktionen untereinander, wo ich zwei verschiedene Datensätze abfrage.
Die Datensätze aus der ersten Funktion werden angezeigt, egal in welchem Sys-Ordner sie liegen.
Bei der zweiten Funktion zeigt er nur Inhalt an, wenn ein SysOrdner gewählt ist.
Verstehe ich nicht...

Hier die Funktionen:

function getItems1() {
 $GLOBALS['TSFE']->sys_language_uid;
 $pages = $this->pi_getPidList($this->cObj->data['pages'],$this->cObj->data['recursive']);
 $query = "SELECT * FROM tx_tabelle_1 WHERE pid IN (".$pages.") ".$this->cObj->enableFields('tx_tabelle_1')." AND sys_language_uid='".$GLOBALS['TSFE']->config['config']['sys_language_uid']."' ORDER BY th_country";
 $res = mysql(TYPO3_db,$query);
 $out=array();
 while($row = @mysql_fetch_assoc($res)) {
	$out[]=$row;
 }
 return $out;
}
	
function getItems2() {
 $GLOBALS['TSFE']->sys_language_uid;
 $pages = $this->pi_getPidList($this->cObj->data['pages'],$this->cObj->data['recursive']);
 $query = "SELECT * FROM tx_tabelle_2 WHERE pid IN (".$pages.") ".$this->cObj->enableFields('tx_tabelle_2')." AND sys_language_uid='".$GLOBALS['TSFE']->config['config']['sys_language_uid']."' ORDER BY th_country";
 $res = mysql(TYPO3_db,$query);
 $out=array();
 while($row = @mysql_fetch_assoc($res)) {
	$out[]=$row;
 }
 return $out;
}
ManuP ·

Es funktioniert... hatte noch eine extra Abfrage von früher drin.
Die hat alles zerschossen.
Nutze jetzt nur die interne Funktion von TYPO3.