Zugriff auf Contenido Variablen aus allgemeiner PHP

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
Bernbacher
Beiträge: 63
Registriert: Fr 21. Jan 2011, 13:29
Kontaktdaten:

Zugriff auf Contenido Variablen aus allgemeiner PHP

Beitrag von Bernbacher »

Hallo,
für versch. Module verwende ich jQuery Ajax-Abfragen auf eine PHP-Datei in der ich versch. Datenbank-Abfragen mache und dort Zugriff auf Contenido-Variablen wie $db, $cfg usw. benötige.
Bisher löse ich das in dem ich ein eigenen Artikel ("Ajax"), mit eigenem Modul, in eigener Vorlage und Layout mache, das mir die entsprechenden Abfragen macht und Werte zurück liefert.
Ich würde aber gerne auf das ganze Gedöns (Artikel, Modul, Vorlage, Layout) verzichten und einfach auf eine PHP-Datei zugreifen (die meine Ajax -Anfragen entgegennimmt und Ergebnisse zurückliefert), die einfach mit in dem php-Ordner des Modul liegt, das wäre viel weniger Aufwand, übersichtlicher und der Kunde fragt sich nicht, was der komische Artikel "Ajax" in den Systemseiten zu suchen hat...
Aber ich nehme mal an das geht aus Sicherheitsgründen nicht, oder?
Wäre klasse, wenn doch :)
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Zugriff auf Contenido Variablen aus allgemeiner PHP

Beitrag von homtata »

Hallo Bernbacher,

du kannst in den /php-Ordner des Moduls eine Datei xxxx.php legen und auf diese im Modul dann wie folgt zugreifen:

Code: Alles auswählen

cInclude("module", "xxxx.php");
Meinst du sowas?

LG
Bernbacher
Beiträge: 63
Registriert: Fr 21. Jan 2011, 13:29
Kontaktdaten:

Re: Zugriff auf Contenido Variablen aus allgemeiner PHP

Beitrag von Bernbacher »

Hallo homtata,

danke für die Antwort, damit kann ich in mein Modul die Datei xxxx.php einbinden,
ich würde aber gerne aus meinem Modul per Javascript (Ajax) auf xxxx.php zugreifen.
Das geht ja auch (wenn man die .htaccess anpasst), aber damit habe ich in der xxxx.php keinen Zugriff mehr auf die contenido Variablen (z.B. $db), was wichtig wäre, da ich von dort Datenbankabfragen machen will.
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Zugriff auf Contenido Variablen aus allgemeiner PHP

Beitrag von homtata »

Nun kenne ich mich speziell mit Ajax zu wenig aus, aber so GANZ verstehe ich dein Problem dennoch nicht:
- mit dem von mir geschriebenen Code kannst du also eine Datei inkludieren.
- damit stehen dir innerhalb des Moduls alle Variablen und Funktionen, die in der externen Datei definiert waren, zur Verfügung, sowohl in php wie in JS.
- du kannst also per JS auf die inkludierten JS-Funktionen zugreifen und per php auf die inkludierten php-Teile.

Warum willst du jetzt unbedingt EXTERN auf die Datei zugreifen, wenn du alles INTERN haben kannst?
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Re: Zugriff auf Contenido Variablen aus allgemeiner PHP

Beitrag von xmurrix »

Hallo Bernbacher,

du kannst z. B. eine ajax.php im Mandantenverzeichnis ablegen, mit minimalster Initialisierung von CONTENIDO und des Frontends:

Code: Alles auswählen

<?php

if (!defined('CON_FRAMEWORK')) {
    define('CON_FRAMEWORK', true);
}

global $contenido_path, $cfg;

// Set path to current frontend
$frontend_path = str_replace('\\', '/', realpath(dirname(__FILE__) . '/')) . '/';

/**
 * 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');
}

cRegistry::bootstrap(array(
    'sess' => 'cFrontendSession',
    'auth' => 'cAuthHandlerFrontend',
    'perm' => 'cPermission'
));


###############################################################################


// hier deine ajax logik und ausgabe...


###############################################################################


// Configuration settings after the site is displayed.
if (file_exists($cfgClient[$client]['config']['path'] . 'config.after.php')) {
    @include ($cfgClient[$client]['config']['path'] . 'config.after.php');
}

cRegistry::shutdown();
Das sollte soweit funktionieren, damit hast du Zugriff auf alle wichtigen Bereiche im CONTENIDO Frontend. Bedenke aber, dass das Beispiel keine vollständige Initialisierung bietet, manche Funktionen, wie das Ausführen von CEC-Hooks, initiales Setzen von Mandant und Sprache, Wechseln von Mandant und Sprache gehen hier dann nicht. Normalerweise wird Mandant und Sprache beim Aufruf der Seite gesetzt, danach beim AJAX-Request wäre das nicht nötig.

Jegliche Sicherheitsaspekte, wie z. B. das Ausgeben von Inhalten geschlossener Bereiche nur für authentifizierte User, würde dann bei dir liegen.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Antworten