$cfgClient nicht vollständig gefüllt

Gesperrt
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

$cfgClient nicht vollständig gefüllt

Beitrag von stese »

hi,

folgende situation: mehrere mandanten im gleichen verzeichnis (standard /cms ) - die mandanten werden über den parameter changeclient gewechselt.

soweit alles super aber, die <base href=""> anweisung im head bleibt beim nicht-standard mandanten leer.

Warum?
Weil die Variable $cfgClient standardmäßig nur mit dem ersten client initialisiert wird, alle weiteren clients sind nicht in der variable enthalten.

Workaround:
da ich die stelle im code nicht gefunden habe, wo die cfgClient das erste mal initialisiert wird (muss irgendwo bei der function page_open() der frontend sessions sein) musste ich mich mit einem workaround zufrieden geben:
in der cms/front_content.php folgende stelle finden:

Code: Alles auswählen

if (!$sess->is_registered("lang") ) $sess->register("lang");
if (!$sess->is_registered("client") ) $sess->register("client");
danach folgende abfrage einbauen:

Code: Alles auswählen

if (!isset($cfgClient[$client]))
{
	rereadClients();
}
danach ist auch das base href wieder gefüllt.
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Mmmh, ich konnte das nicht nachstellen (V4.6.4). Hast Du Dich einmal aus Contenido ab- und wieder angemeldet, nachdem Du den bzw. die weiteren Mandanten erzeugt hast?

Ich gehe davon aus, dass die Erst-Initialisierung von $cfgClient in der front_content.php in Zeile 59 erfolgt:

Code: Alles auswählen

if ($cfgClient["set"] != "set")
{
	rereadClients();
}
$cfgClient["set"] wird - wenn ich nicht wieder zu dusselig zum Suchen war, nur in functions.general.php in der Funktion rereadClients definiert.

Die Funktion verwendet wiederum diese SQL-Abfrage:

Code: Alles auswählen

	$sql = "SELECT
	                idclient,
	                frontendpath,
	                htmlpath,
	                errsite_cat,
	                errsite_art
	            FROM
	            ".$cfg["tab"]["clients"];
Danach heißt es:

Code: Alles auswählen

	while ($db->next_record())
	{

		$cfgClient["set"] = "set";
		$cfgClient[$db->f("idclient")]["path"]["frontend"] = $db->f("frontendpath");
D.h. werden die Daten des ersten Mandanten geladen, werden auch gleich alle anderen in den Array geladen.

Ich würde behaupten, dass zwischen Zeile 59 (rereadClients) und Zeile 128 (if (!$sess->is_registered("client") ) $sess->register("client");) die Daten zu den weiteren Mandanten aus dem Array nicht verloren gehen dürften.

Könntest Du das ggf. nochmal testen oder weitere Informationen zur Reproduzierbarkeit zur Verfügung stellen?

Etwas könnte man jedoch beachten: Wird changeclient angegeben, sollte man bei Deiner Konstellation auch changelang angeben: Wird changeclient angegeben, werden die dazugehörigen Sprach-Variablen $lang und $load_lang geleert (da sie nur zum Standardmandanten passen dürften, $load_lang kommt aus der config.php im Mandantenverzeichnis).

Da keine Sprache gesetzt ist, wird - sofern in der config.php im Mandantenverzeichnis angegeben (und das ist der Standard) - $lang = $load_lang gesetzt. $load_lang ist aber i.A. die Sprach-ID der Standardsprache des ersten Mandanten - da jeder Mandant eine eigene Sprache haben muss, passt dieser Wert nicht zum zweiten Mandanten (der mit changeclient gewählt wurde). Das kostet unnötig Zeit.

Beispiel:
Mandant A mit Sprach-ID 1 (-> $load_lang in config.php = 1)
Mandant B mit Sprach-ID 2

Aufruf mit changeclient = B (natürlich die ID, nicht "B", ist nur ein Beispiel) -> es wird versucht, die Seite für Mandant B mit Sprach-ID 1 anzuzeigen.

Wird changeclient und changelang korrekt und gleichzeitig angegeben, werden diese Werte für $client und $lang gesetzt und alles läuft weiter.

Dies ist nicht notwendig, wenn die Mandanten in unterschiedlichen Verzeichnissen liegen, da sie dann über separate config.phps mit entsprechenden und passenden $load_lang-Einträgen verfügen.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

hi, danke für die infos.

mittlerweile nehme ich an, dass ich im browser noch session cookies offen hatte, die gefüllt waren (ich habe mich ja im frontend befunden und nicht im backend und war nicht eingeloggt - nur als gast sozusagen auf der website)

daher war die variable schon nach folgender zeile initialisiert - mit dem falschen werten:

Code: Alles auswählen

if ($contenido)
{

	//Backend
	page_open(array ('sess' => 'Contenido_Session', 'auth' => 'Contenido_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm'));
	i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang);
}
else
{
	//Frontend
	page_open(array ('sess' => 'Contenido_Frontend_Session', 'auth' => 'Contenido_Frontend_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm'));
}
aber war halt schon spät gestern, dass man sowas übersieht. manchmal sieht man den wald vor lauter bäumen nicht.
Gesperrt