i18nInit und Backend-Plugins

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

i18nInit und Backend-Plugins

Beitrag von Dodger77 » Fr 5. Okt 2007, 11:28

Die neue Initialisierung in der i18n():

http://www.contenido.org/forum/viewtopi ... 480#102480

macht in Zusammenhang mit den Plugins anscheinend kleinere Probleme. Das hello_world-Plugin (und meine kleinen Plugins deshalb dann auch) machen in Zusammenhang mit der neuen 4.6.22 Probleme, da jeweils in der "config.plugin.php" die i18n() verwendet wird. Anscheinend steht $belang dort noch nicht als globale Variable zur Verfügung. Folge:

Code: Alles auswählen

Warning: /.../contenido/plugins/hello_world/includes/config.plugin.php 49: i18nInit $belang is not set in /.../contenido/includes/functions.general.php on line 1964
und wahrscheinlich viel Geschrei bei den ersten Updates. Leider bin ich vorher nicht zum Testen eines Updates von bestehenden Auftritten gekommen.

Vielleicht kann das mal jemand checken, ob das bei ihm auch auftritt.

Als Workaround kann man natürlich die Aufrufe von i18n() aus den jeweiligen "config.plugin.php"-Dateien auskommentieren und somit das Backend weiter benutzen.

Paulchen
Beiträge: 12
Registriert: Mi 25. Mai 2005, 20:56
Kontaktdaten:

Beitrag von Paulchen » Fr 5. Okt 2007, 13:42

Hallo Dodger77,

bei mir ist es das gleiche Problem. Habe das "psMetaTags" Plugin istalliert und erhalte auch eine Fehlermeldung.

Mit dem auskommentieren von "i18" ging das Backend dann wieder.
Danke vorerst mal für den Tip.

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Fr 5. Okt 2007, 14:02

Alternativ (und vor allem gleich für alle Plugins wirksam) kann man auch in der Datei "contenido/includes/config.misc.php":

Code: Alles auswählen

/* Don't display errors */
@ini_set("display_errors",true);
in

Code: Alles auswählen

/* Don't display errors */
@ini_set("display_errors",false);
ändern.

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Fr 5. Okt 2007, 15:20

Ok, nochmal etwas umgeschaut. $belang kann natürlich erst ab dem page_open() in der "contenido/index.php" zur Verfügung stehen. Die jeweiligen "config.plugin.php" der Plugins werden bereits in der "contenido/includes/startup.php" eingebunden. Mal sehen, ob man das Problem umgehen kann, ohne die Plugins anzupassen.
Fortsetzung folgt ... :wink:

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Di 9. Okt 2007, 18:54

Habe nun nochmal etwas ausprobiert. In der Datei "contenido/includes/startup.php" den Teil:

Code: Alles auswählen

/* Include the plugin configuration */
$handle = opendir($cfg['path']['contenido'] . $cfg["path"]['plugins'] );

while ($plugin = readdir($handle))
{
	$configfile = $cfg['path']['contenido'] . $cfg["path"]['plugins'] . $plugin . "/includes/config.plugin.php";
	$localedir = $cfg['path']['contenido'] . $cfg["path"]['plugins'] . $plugin . "/locale/";

	if (is_dir($cfg['path']['contenido'] . $cfg["path"]['plugins'] . $plugin ))
	{
    	if (file_exists($localedir) && $plugin != "..")
    	{
    		i18nRegisterDomain($plugin, $localedir);
    	}
    	if (file_exists($configfile))
    	{
    		include_once($configfile);
    	}
	}	
} 
entfernt und dafür in "contenido/index.php" und "contenido/main.php" jeweils nach dem:

Code: Alles auswählen

page_open(array('sess' => 'Contenido_Session',
				'auth' => 'Contenido_Challenge_Crypt_Auth',
				'perm' => 'Contenido_Perm'));
eingefügt. Das scheint soweit zu funktionieren.

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Mi 10. Okt 2007, 10:43

OK, nochmal etwas nachgedacht. O.g. Code müsste natürlich auch in der "front_content.php" der jeweiligen Mandanten einbinden, damit so Sachen wie die Frontend-User-Plugins auch im Frontend funktionieren.

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Beitrag von Oldperl » Fr 12. Okt 2007, 14:06

Hallo Dodger,

Änderungen im Backend gemacht, Plugin läuft, vielen Dank. :)

evtl. sollte man aber doch mal eine Lösungen suchen die das zusätzliche registrieren von getTextDomains zum Beispiel im recipients-plugin
:arrow: http://faq.contenido.org/index.php?acti ... artlang=de
unnötig macht.
Kann mich erinnern, das ich mal schwer Probleme hatte bei Mehrfacheinbindungen mit getText.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Beitrag von Oldperl » Do 25. Okt 2007, 15:57

Ich hab mir die i18n-Funktionen nochmal angeschaut und hab da noch was gefunden was ich so nicht ganz verstehe (functions.i18n.php).

Beim Aufruf von i18n() wird am Anfang der Funktion die $GLOBALS['belang'] auf false gesetzt, falls Sie nicht gesetzt wird (Zeile 57).

Danach wird die i18nInit aufgerufen, in der aber dieses false nirgendwo eine Auswirkung hat, im Gegenteil, die env-Variable LANG wird auf 0 gesetzt bei nicht eingeschaltetem safemode, was imo so wohl nicht gewollt ist (Zeile 198).

2 Verständnisfragen stellen sich mir dazu.

1. Was soll die Änderung mit der $GLOBAL-VAriablen gegenüber der alten Version z.B. in 4.6.15 bewirken?

2. Sollte man nicht sicherheitshalber die Funktion beenden/abbrechen falls diese Variable nicht vorhanden ist.

Evtl. könnte man ja auch die Schleife für die Plugineinbindung in einer Funktion kapseln und sie dann in den genannten Dateien aufrufen, so wäre ein mehrfaches Vorkommen des Codes umgangen.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Beitrag von Oldperl » Sa 27. Okt 2007, 13:42

Also ich hab das mit ner Funktion nun mal wie folgt umgesetzt.
Dazu müssen folgende Dateien geändert werden.

contenido/includes/functions.general.php

am Ende der Datei folgende Funktion einfügen

Code: Alles auswählen

/**
 * function includes plugins if exist
 * and sets i18domain for plugin
 *
*/
function includePluginConf()
{
	global $cfg;

    $conpluginpath = $cfg['path']['contenido'].$cfg["path"]['plugins'];

    $dh = opendir($conpluginpath);

    while (($plugin = readdir($dh)) !== false)
    {
    	if (is_dir($conpluginpath.$plugin)  && $plugin != ".." && $plugin != ".")
       	{
            $configfile = $conpluginpath.$plugin. "/includes/config.plugin.php";
			$langfile   = $conpluginpath.$plugin. "/includes/language.plugin.php";
			$localedir  = $conpluginpath.$plugin. "/locale/";

            if (file_exists($localedir))
        	{
	            i18nRegisterDomain($plugin, $localedir);
	        }

	        if (file_exists($langfile))
	        {
	            include_once($langfile);
	        }
	        if (file_exists($configfile))
	        {
	            include_once($configfile);
	        }
	    }
    }
    closedir($dh);
}
contenido/includes/startup.php (ab Zeile 78 ) und contenido/includes/cfg_language_de.inc.php (ab Zeile 382)

Bei beiden Dateien ziemlich am Ende die Pluginfunktion auskommentieren/entfernen

contenido/index.php (Zeile32) und contenido/main.php (Zeile46)

Nach dem Aufruf der i18Init-Funktion folgender Funktionsaufruf

Code: Alles auswählen

i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang);
includePluginConf();
Ebenfalls in der cms/front_content.php (Zeile 92) hinter der page_open-Funktion

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'));
}
includePluginConf();
EDIT:
contenido/external/backendedit/front_content.php (ab Zeile 82 ) wie schon die front_content.php im cms-Verzeichnis anpassen.

Das war es. :) Könntet ihr das bitte testen?

Zur Funktion:
Ich habe diese etwas umgebaut und aus Abwärtskompabilitätsgründen aus den Beiden vorhandenen kombiniert.
  • die beiden Dir . und .. werden schon in der 1. if-Schleife geprüft
  • language.inc.php wird, falls vorhanden, eingebunden.
ToDo
  • Evtl. könnte man wie bei der Funktion scanPlugins() (functions.general.php ab Zeile 1518 ) ein scan-Timeout einbauen. Dazu müsste man erst mal ne Zeitmessung machen ob und was das bringt.
  • Besser wäre es IMO die beiden Funktionen zusammenzufassen, da auch in besagter Funktion gettextDomains gesetzt und conf-Dateien includet werden. Bei gesetzter $entity könnte man dieses Plugin, ansonsten alle Plugins scannen.
Gruß aus Franken

Ortwin
Zuletzt geändert von Oldperl am Sa 27. Okt 2007, 17:00, insgesamt 2-mal geändert.
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

SIL
Beiträge: 12
Registriert: Sa 25. Jun 2005, 13:33
Kontaktdaten:

Beitrag von SIL » Sa 27. Okt 2007, 16:13

Freunde,

ich habe so etwas von einem Hals auf die 4.6.23. Ich arbeite jetzt seit 5 Tagen mit diesem Drecks-Fehler. Seite Jahren arbeite ich mit Contenido, aber so einen Ärger habe ich damit noch nicht erlebt.

Alle Änderungen, die ihr vorschlagt (inkl. Ortwins), helfen leider -bei mir!- überhaupt nicht. Ich erhalte ständig diese Meldung:

Code: Alles auswählen

Warning: /home/kanzlei/www/xxxxxxx/contenido/includes/functions.general.php 2117: i18nInit $belang is not set in /home/kanzlei/www/xxxxxx/contenido/includes/functions.general.php on line 1964

Warning: mail() [function.mail]: Could not execute mail delivery program '/usr/sbin/sendmail -t -i ' in /home/kanzlei/www/xxxxxxxx/contenido/includes/functions.general.php on line 2156
Das ganze mal mit sendmail, mal ohne, mal blank.
Der Fehler tritt z. B. konkret auf, wenn über Tiny (habe ich auch schon die neueste Version von Hand eingeflickt) ein Link eingefügt werden soll. Sobald aus dem Editor das Auswahlfenster aufgerufen wird - Fehler!

Es ist wirklich zum...

Dafür ist mir aber etwas anderes aufgefallen: Der Fehler tritt bei mir nur unter dem IE-Explorer 7 unter Vista auf. Auf dem gleichen System läuft mit Firefox alles perfekt. Nicht ein einziges Mal die Fehlermeldung.

Alles Herabsetzen von Sicherheitsstufen, vertraute Seite, Neuinstallation Java, 3 x Contenido neu - jedes Mal der gleich Sick.
Kunde MUSS natürlich unbedingt IE benutzen...

Abgesehen davon ist das Contenido-Log voll mit

Code: Alles auswählen

[27-Oct-2007 17:01:11] /contenido/main.php?area=con&frame=3&idcat=10&idtpl=2&contenido=40d2df635ece0a794c53da15be521e0a connect(localhost, xxxxxx, $Password) failed.
ohne, dass mir ein Grund dafür ersichtlich ist.

Schönen Abend noch, ich gehe jetzt mit dem Hund spazieren und ein virtuelles Hoch auf den, der mir die Lösung bringt... :D

SIL

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Beitrag von Oldperl » Sa 27. Okt 2007, 16:42

Soderle, da hat ich doch schon das 1. Problem :roll:

Auf dem Server Opensuse 10.1, apache 2.2 und PHP 5.2.

Fehler:
Beim Einlesen des Plugin_Verzeichnisses wird nur der 1. Pluginordner verarbeitet, danach nix mehr. Dadurch werden z.B. die Chains nicht mit eingebunden und das Frontend-Login funzt nicht.

Lösung:
Es liegt an der Variablen $handle.
Weiss der Geier warum es mit dieser Var nicht geht, aber wenn man sie ändert z.B. in $dh dann geht es. (im Anleitungspost geändert)

Auserdem habe ich die while-Schleife noch angepasst wie auf php.net empfohlen :arrow: http://www.php.net/readdir
und das dir-handle am Ende der Funktion vorschriftsmässig geschlossen (closedir($dh); )

@SIL
Hoffentlich hatte der Hund Spaß :wink:
Deine Fehler kann ich leider nicht nachvollziehen, da ich Vista nicht habe (wer brauch das?), aber ich werd mir wohl doch mal den IE7 irgendwo drauf machen müssen :twisted:
Es scheint mir aber bei dir nicht nur an einer Sache zu liegen, da

Code: Alles auswählen

[27-Oct-2007 17:01:11] /contenido/main.php?area=con&frame=3&idcat=10&idtpl=2&contenido=40d2df635ece0a794c53da15be521e0a connect(localhost, xxxxxx, $Password) failed.
offensichtlich nichts mit der Einbindung der Plugins zu tun hat.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Beitrag von Oldperl » Sa 27. Okt 2007, 16:58

Ok, nächste Ergänzung:

Die contenido/external/backendedit/front_content.php wie schon die front_content.php im cms-Verzeichnis anpassen. (im Anleitungspost ergänzt)

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

miertschink_st
Beiträge: 54
Registriert: Mi 19. Apr 2006, 19:00
Kontaktdaten:

Beitrag von miertschink_st » So 11. Nov 2007, 17:16

Danke für die Anleitungen - bis jetzt läufts bei mir damit

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Beitrag von derSteffen » Mo 12. Nov 2007, 11:23

Hallo,
Unable to load vpTransformationen/xml/ XML language file
ist dies eine Fehlermeldung, welches mit dem hier geschilderten Problem zu tun hat?

Ich habe die Anpassungen soweit vorgenommen! Leider tut sich bei mir nichts! Ich habe eine Update von 4.6.15 MR auf 4.6.23 MR vorgenommen.

Habe ich das in der Anleitung richtig verstanden:
In der startup.php und der cfg_language_de.inc.php die vorhandene PluginFunktion komplett entfernen?
Und in der index.php und der main.php nach

Code: Alles auswählen

i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang);
nur noch die Zeile ergänzen:

Code: Alles auswählen

includePluginConf();
Und ind der cms/front_content.php und in der backendedit/front_content.php folgenden Code suchen:

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'));
}
und darunter folgende Zeile ergänzen:

Code: Alles auswählen

includePluginConf();
Oder liegt es an der VpTransformation? (Ist eine ältere Version)

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Beitrag von derSteffen » Mo 12. Nov 2007, 11:28

SORRY - Fehlalarm! Mein Plugin ist gar nicht installiert! D.h. durch mein Upgrade habe ich nicht den Inhalt der alten Plugin-Ordner mit rübergenommen!

Aber vielleicht könnte mir trotzdem bitte jemand sagen, ob ich die Anpassungen richtig vorgenommen habe! Danke.

Gesperrt