Hallo josh,
das Initialisieren von CONTENIDO in der captcha.php oder in einem anderen Script, kann je nach Lage des Scriptes etwas anders ausfallen.
Bei Beispiel von vorhing ging ich davon aus, dass das Script direkt im Mandantenordner liegt. Je nachdem, wo es ist, kann der Pfad zum Frontend, also der Wert in $frontend_path anders ausfallen.
Man kann es, so wie du es gemacht hast, fest angeben, oder man ermittelt es dynamisch. Ich habe das Beispiel nun etwas angepasst, so dass es das aktuelle Arbeitsverzeichnis kurzfristig ändert, um CONTENIDO zu initialisieren. Dann spielt es keine Rolle, wo das Script genau liegt, es muss nur noch die Variable $frontend_path korrekt gesetzt sein.
...wo kommt der Wert in $contenido_path her?...
Die Variable $contenido_path ist der relative Pfad zum CONTENIDO Backend (.../contenido/) vom Mandantenverzeichnis (.../cms/) und hat immer den Wert "../contenido/". Das Funktioniert aber nicht, wenn du die Mandantenkonfiguration aus einem anderen Verzeichnis als Mandantenverzeichnis (.../cms/) einbindest.
...gibt es in der folge weitere Variablen die so nicht passsen?...
Eigentlich nicht. Willst du CONTENIDO in einem eigenen Script initialisieren, welches nicht direkt unterhalb vom Mandantenverzeichnis (.../cms/) liegt, solltest du folgenden Code verwenden:
Code: Alles auswählen
<?php
if (!defined('CON_FRAMEWORK')) {
define('CON_FRAMEWORK', true);
}
global $contenido_path, $cfg;
//## Pfad zum Frontend (Mandantenverzeichnis), das kann je nach Installation anders sein!
$frontend_path = str_replace('\\', '/', realpath(dirname(__FILE__) . '/')) . '/';
//## oder auch
//## $frontend_path = $_SERVER['DOCUMENT_ROOT'] . '/cms/';
//## Das aktuelle Arbeitsverzeichnis merken und zum Mandantenverzeichnis wechseln. Das ist nötig um CONTENIDO zu
//## korrekt initialisieren, ohne jedes Mal die Variable $contenido_path anpassen zu müssen. Ist der Wert in
//## $contenido_path ein absoluter Pfad, kann man sich das Wechseln des Arbeitsverzeichnises sparen...
$current_working_dir = getcwd();
chdir($frontend_path);
/*
* Do not edit this value!
*
* If you want to set a different enviroment value please define it in your .htaccess file
* or in the server configuration.
*
* SetEnv CON_ENVIRONMENT development
*/
if (!defined('CON_ENVIRONMENT')) {
if (getenv('CONTENIDO_ENVIRONMENT')) {
$sEnvironment = getenv('CONTENIDO_ENVIRONMENT');
} elseif (getenv('CON_ENVIRONMENT')) {
$sEnvironment = getenv('CON_ENVIRONMENT');
} else {
// @TODO: provide a possibility to set the environment value via file
$sEnvironment = 'production';
}
define('CON_ENVIRONMENT', $sEnvironment);
}
// Include the config file of the frontend to initialize client and language id
include_once($frontend_path . 'data/config/' . CON_ENVIRONMENT . '/config.php');
// CONTENIDO startup process
if (!is_file($contenido_path . 'includes/startup.php')) {
die("<h1>Fatal Error</h1><br>Couldn't include CONTENIDO startup.");
}
include_once($contenido_path . 'includes/startup.php');
// Clients local configuration
if (file_exists($frontend_path . 'data/config/config.local.php')) {
@include ($frontend_path . 'data/config/config.local.php');
}
// Bootstrap Frontend
cRegistry::bootstrap(array(
'sess' => 'cFrontendSession', //## Optional, wenn Session benötigt wird
'auth' => 'cAuthHandlerFrontend', //## Optional, wenn Authentifizierung benötigt wird
'perm' => 'cPermission' //## Optional, wenn Berechtigungssystem benötigt wird
));
//## Wieder zum Ursprungsverzeichnis wechseln
chdir($current_working_dir);
//## CONTENIDO Initialisierung abgeschlossen, ab hier kann man mit dem Script fortfahren
Habe wichtige Stellen mit einem "//##" Präfix versehen und kommentiert.
Bedenke aber, dass das jetzt nicht offiziell ist. Es kann sein, dass das in Zukunft vereinfacht wird oder geändert wird. Momentan würde es so funktionieren. Du könntest den Code, sofern es öfters verwendet werden soll, auch in ein Include packen und überall das Include einbinden, das bleibt dir überlassen.
Für die Zukunft würde ich mir wünschen, dass man CONTENIDO einfacher in externen Scripten einbinden und initialisieren kann. Bin mir sicher, dass das auch noch kommt.
Gruß
xmurrix