Hilfe - Suche - Mitglieder - Kalender
Vollansicht: PHP-Datei via Ajax GET kennt keine SF Umgebungsvariablen
Forum Sefrengo.org > Allgemeine Foren > Entwicklung
CarstingAxion
Hallo liebe Forum-Leser,

folgendes Szenario:

Mit einem Ajax Get-Request hole ich mir eine kleine php Datei aus meinem Modulverzeichnis /cms/mod/
In dieser Datei werden Daten aus der DB geholt und an meinen eigentlichen Moduloutput zurückgegeben.

Da diese Datei aber erst nach dem Parsing der Seite aufgerufen wird, gibt es einige (plausible) aber blöde Ergebnisse.
  1. ich muss meine Daten als klassischen mysql_query holen und kann die Vorzüge von ADODB nicht nutzen, da der Aufruf des AdoDB Objekts nicht bekannt ist
  2. Dateilinks in der Form cms://idfile=563 werden nicht umgemappt


Hat jemand einen Tipp oder eine Idee, wie ich das gekonnt umschiffen kann.

Ich bin für jede noch so skurile Idee sehr dankbar.
mvsxyz
1. Du kannst in deinem Modul die Datei inc/inc.init_external.php includieren. Damit erhältst du Zugriff auf alle Sefrengo Standardobjekte ($sess, $auth, $perm, ...). Damit hättest du auf jeden Fall schon mal über die API Zugriff auf AdoDB.

2. Eigentlich sollte das durch die Funktion in der inc.generate_code.php abgedeckt sein. Hast du den Cache gelöscht?
Ansonsten kannst du dir nur die letzten Zeilen heraus kopieren und in dein Modul einbinden:

QUELLTEXT
// Dateilinks ersetzen
// Dateilinks suchen...
preg_match_all("!cms://idfile=(\d+)!", $code, $internlinks);
$sql_links = implode(',', $internlinks[1]);
if ($sql_links != '') {
    $sql = "SELECT
                A.idupl id, A.filename filename,B.dirname dirname
            FROM
                ".$cms_db['upl']." as A
                LEFT JOIN ". $cms_db['directory'] ." as B USING(iddirectory)
            WHERE
                A.idclient=$client
                AND A.idupl IN ($sql_links)";
    $db->query($sql);
    while($db->next_record()){
        $cms_file[$db->f('id')] = $cfg_client['upl_htmlpath'].$db->f('dirname').$db->f('filename');
    }
}
//...und ersetzen
$in ="'cms://idfile=(\d+)'e";
$out = '\$cms_file[\\1]';
$code = preg_replace($in, $out, $code);
CarstingAxion
Danke mvsxyz!

Der Tipp mit der inc/inc.init_external.php klingt gut, dass werde ich machen.
Schafft sicher Ordnung im Code, wenn da ein paar Zeilen verschwinden.

Tipp Nummer 2 hatte ich mir in der Zwischenzeit selbst erschlossen und es funktioniert.
Von daher vielen, vielen Dank für diesen wichtigen Hinweis! Mit dem Cache hatte es aber nicht zu tun.

Besten Dank also nochmal.
CarstingAxion
Ich möchte gerne das 1. Problem nochmal auf die Tagesordnung rufen:
ZITAT
Mit einem Ajax Get-Request hole ich mir eine kleine php Datei aus meinem Modulverzeichnis /cms/mod/
In dieser Datei werden Daten aus der DB geholt und an meinen eigentlichen Moduloutput zurückgegeben.

Da diese Datei aber erst nach dem Parsing der Seite aufgerufen wird, gibt es einige (plausible) aber blöde Ergebnisse.

1. ich muss meine Daten als klassischen mysql_query holen und kann die Vorzüge von ADODB nicht nutzen, da der Aufruf des AdoDB Objekts nicht bekannt ist

Mit dem ersten Hinweis von mvsxyz glaubte ich ganz gut zu fahren, bis ich feststellte, dass im FE der Modulausgabe (und ohne dass ich selber im BE angemeldet bin) ein Backendlogin verlangt wird, nach dem ich die
ZITAT
Datei inc/inc.init_external.php includieren

ließ.

In der Zwischenzeit hatte ich den DB-Aufruf also hart in die "geajaxte" php-Datei gelegt, aber ich störe mich an dieser Unlogik.
Es muss doch einen Weg geben, die Methoden der ADODB Klasse auch für nachgeladene Skripte zur Verfügung zu stellen.

Hat noch jemand einen Tipp?
Ich bin für jeden Hinweis sehr dankbar.
pawel
Vielleicht hilft Dir ein Tipp von STam weiter.

Aber brauchst du die Abstraktionsschicht? Ich habe doch für ein Autocomplete gezeigt, wie ein Zusammenspiel mit externen Dateien und Javascript gehen kann.
Dieses ist eine vereinfachte Darstellung unseres Foreninhaltes. Um die detaillierte Vollansicht mit Formatierung und Bildern zu betrachten, bitte hier klicken.
Invision Power Board © 2001-2024 Invision Power Services, Inc.