Hallo Leute,
ich habe folgenden Code:
//LL
$tLangFilePath = t3lib_extMgm::extPath($this->extKey).dirname($this->scriptRelPath).'/locallang.php';
$tArrLang = t3lib_div::readLLfile($tLangFilePath,$this->LLkey);
while (list($keyLangFile, $valLangFile) = each($tArrLang[$GLOBALS["TSFE"]->config["config"]["language"]])) {
$markerArray["###".$keyLangFile."_IDENT###"] = "";
}
reset($tArrLang[$GLOBALS["TSFE"]->config["config"]["language"]]);
Ich habe zwei Sprachen:
Deutsch ID=0
Englisch ID=1
Auf einer Seite habe ich via Plugin meine Extension eingefügt. Besuche ich im Frontend die deutsch sprachige Seite, geht alles. Besuche ich die englisch sprachige Seite, erhalte ich folgende Fehlermeldung:
Variable passed to each() is not an array or object...
Ich habe mal mit is_array geprüft, ob es sich bei $tArrLang um ein Array prüft. is_array liefert den Wert TRUE (1).
Was mache ich falsch? Was kann ich tun?
Viele Grüße und danke im Voraus
dabjoern
Schau dir doch mal eher den Inhalt der Variable mit print_r($var) an...
Hallo,
danke für deine Antwort. Also ich habe mir mal den Inhalt ausgeben lassen. Soweit ich das sehe, wir die gesamte locallang.php 4 mal ausgegeben. Warum das 4 mal geschieht, weiß ich auch nicht, komisch...
Viele Grüße
dabjoern
warum so kompliziert und nicht über $this->pi_getLL ?
Hallo steffenk,
kann ich dir leider auch nicht sagen, warum so kompliziert. Die Extension stammt zwar aus unserer Feder, doch leider habe ich keinen Zugriff auf den Programmierer. Also wollte ich mir selbst helfen. Nun schaue ich wie ein Schwein ins Uhrwerk. Ich verstehe ja, das man mit $this->pi_getLL die locallang abfragen kann, aber ich bin leider nicht so bewandert, wie ich den PHP-Code hier entsprechend anpassen müsste, um ihn zu vereinfachen. An welcher Stelle würdest du denn $this->pi_getLL ansetzen? Während der while Abfrage, oder in der Schleife selbst?
Grüße
dabjoern
also ich würde das so machen:
$lang=$this->LLkey ? $this->LLkey : 'default';
foreach($this->LOCAL_LANG[$lang] as $key=>$val) {
$markerArray["###".$key."_IDENT###"] = $val;
}
In Deinem Code wurden alle marker gelöscht ???
Hi steffenk,
ich habe deinen Code mal eingefügt. Vielen Dank. Er funktioniert an sich super und ist nicht mehr so komplex. Aber dennoch kommt eine ähnliche Fehlermeldung. Ich glaube fast, dass das Problem woanders her kommt. Kann es an den Datensätzen liegen? Es existiert eine Vielzahl an Datensätzen. Es gibt keine Spracheinstellungen und keine Features die bspw. durch die Lokalisierungsansicht geboten werden. Das Plugin auf der englischsprachigen Seite greift auf den selben SysOrdner zu.
Hat jemand noch eine Idee?
Grüße
dabjoern
Edit: Das interesante ist ja noch dazu, dass ich die Datensätze auch im Englischen angezeigt bekomme. Auch die Labels werden ordentlich ersetzt...
ich weiss nicht welches Problem besteht. Du sagst ja auch nur "ähnlich Fehlermeldung" - das sagt mir nichts. Jede Fehlermeldung hat einen Text und eine Zeilennummer ...
Datensätze müssen übersetzt sein, aber gehts überhaupt um Datensätze ? oder um Seiteninhalt ?
Sorry für meine unprofessionelle Antwort. Die Fehlermeldung (welche 4 mal erscheint) ist doch nicht die gleiche:
"Invalid argument supplied for foreach()."
Ich denke schon, dass es sich um Datensätze handelt. Diese liegen in einem Sysordner vor. Der Seiteninhalt, der die Datensätze anzeigt ist ein Plugin auf einer Seite. Die Seite liegt sowohl in Deutsch als auch in Englisch vor. Der Seiteninhalt liegt auch in Deutsch und Englisch vor. Die Datensätze liegen sozusagen nur in Deutsch vor. Ich wüsste nicht, wie ich sie auch der englischsprachigen Page zuweisen kann...
Viele Grüße
dabjoern
Hi,
also ich habe mir mal das Dokument durchgelesen, das du gepostet hast. Auch habe ich diesen Thread durchgearbeitet:
#22855. Daraufhin habe ich die Extension entsprechend angepasst. D.h. nun hat jeder Datensatz ein Dropdown, um die Sprache zuzuordnen. Das funktioniert soweit auch, d.h. im Frontend werden nun die Datensätze entsprechend der Sprach-Zuordnung angezeigt. Dennoch erhalte ich weiterhin folgende Fehlermeldung:
Warning: Variable passed to each() is not an array or object
in der Zeile
while (list($keyLangFile, $valLangFile) = each($tArrLang[$GLOBALS["TSFE"]->config["config"]["language"]])) {
Grüße
dabjoern
wozu diese Zeile ? Ich hatte Dir doch ne Alternative geliefert.
steffenk schrieb
wozu diese Zeile ? Ich hatte Dir doch ne Alternative geliefert.
Hi,
auch die Alternative liefert den weiter oben beschriebenen Fehler ("Invalid argument supplied for foreach().") in Zeile
foreach($this->LOCAL_LANG[$lang] as $key=>$val) {
Viele Grüße
dabjoern
den Fehler bekommst Du weg mit
foreach((array)$this->LOCAL_LANG[$lang] as $key=>$val) {
Die Ursache ist aber eine falsche Konfiguration, denn dann ist $this->LOCAL_LANG[$lang] leer.
Um das zu überprüfen, mach direkt vor dem foreach mal 2 Debug-Ausgaben:
t3lib_div::debug($lang,'das ist $lang');
t3lib_div::debug($this->LOCAL_LANG,'der komplette Inhalt des Sprachfiles');
Hi auch,
steffenk schrieb
den Fehler bekommst Du weg mit
foreach((array)$this->LOCAL_LANG[$lang] as $key=>$val) {
Stimmt. Damit ist der Fehler weg.
steffenk schrieb
Die Ursache ist aber eine falsche Konfiguration, denn dann ist $this->LOCAL_LANG[$lang] leer.
Um das zu überprüfen, mach direkt vor dem foreach mal 2 Debug-Ausgaben:
t3lib_div::debug($lang,'das ist $lang');
t3lib_div::debug($this->LOCAL_LANG,'der komplette Inhalt des Sprachfiles');
Also vorher wie nachher (Änderung der foreach-Schleife) ergibt der Debug folgende Ausgabe:
das ist $lang
|de| bzw. |en|
und dann wird jeweils "der komplette Inhalt des Sprachfiles" ausgegeben. Alles ist ordnungsgemäß da...
Viele Grüße und tausend dank!
dabjoern