Fehler bei der Layoutbearbeitung

minihops
Beiträge: 6
Registriert: Mo 11. Apr 2005, 14:59
Kontaktdaten:

Fehler bei der Layoutbearbeitung

Beitrag von minihops » Mo 18. Apr 2005, 15:28

Hallo,
ich habe mir die CVS version von vor etwa 3 Wochen heruntergeladen. Funktioniert im Großen und Ganzen auch schon recht gut.
Ich habe ein Update der Datenbank gemacht, da ich auch schon mit der Version 4.4.4 gearbeitet habe.
Möchte ich nun ein Layout bearbeiten, bekomme ich immer folgenden Fehler.
Woran kann das liegen?

Fatal error: Cannot use string offset as an array in /home/www/contenido/html/ver45/contenido/classes/class.htmlvalidator.php on line 92

Danke Christof

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Di 19. Apr 2005, 11:03

welche cvs version genau ? (bitte genauen link auf die snapshot version angeben)
welche php version ?
*** make your own tools (wishlist :: thx)

minihops
Beiträge: 6
Registriert: Mo 11. Apr 2005, 14:59
Kontaktdaten:

Hat etwas länger gedauert....

Beitrag von minihops » Fr 22. Apr 2005, 08:34

Hallo,
ich habe leider erst jetzt Zeit gefunden dir zu antworten.
Ich habe heute die neuste Snapshot (18.4.05) version installiert und den Fehler immernoch drin.
Der Fehler tritt im überigen auch dann auf, wenn ich eine neues Layout anlegen möchte.

Meine PHP Version ist 5.0.4 , falls das was hilft.

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 22. Apr 2005, 08:45

also die version -> http://www.contenido.org/snapshots/cont ... 18.tar.bz2

bekommst du den fehler bei jedem layout ?
*** make your own tools (wishlist :: thx)

minihops
Beiträge: 6
Registriert: Mo 11. Apr 2005, 14:59
Kontaktdaten:

Ja

Beitrag von minihops » Fr 22. Apr 2005, 13:07

Ja, leider bekomme ich bei allen Layouts diesen Fehler....
Beim Anlegen von dem Layout bekomme ich, wie gesagt, auch den Fehler, aber der Name des LAyouts wird gespeichert. Ob der HTML Code auch gespeichert wird, weiß ich allerdings nicht.
Anzeigen lassen kann ich ihn mir auf jeden Fall nicht. Bei keinem Layout..Leider....

Aber ansonsten funktioniert das schon super....Vor allem die neuen "Language" methoden......
Danke
Christof

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Sa 23. Apr 2005, 13:29

hab mir das gerade angesehen... (contenido-cvs-2005-04-22.tar)

in classes/class.htmlvalidator.php findet sich ca um zeile 92 folgendes:

Code: Alles auswählen

				if (!array_key_exists($htmlParser->iNodeName, $this->nestingNodes))
				{

					$htmlParser->iNodeName[$htmlParser->iNodeName][intval($this->nestingLevel[$htmlParser->iNodeName])] = array();

				}
ähm scheint ein typo zu sein... der array sollte vermutlich bei $this->nestingNodes erzeugt werden....

Code: Alles auswählen

				if (!array_key_exists($htmlParser->iNodeName, $this->nestingNodes))
				{

					$this->nestingNodes[$htmlParser->iNodeName][intval($this->nestingLevel[$htmlParser->iNodeName])] = array();
				}
fehlermeldung taucht dann keine mehr auf...
ob das so beabsichtigt ist ??? hab mir die klasse sonst nicht weiters angesehen...
*** make your own tools (wishlist :: thx)

minihops
Beiträge: 6
Registriert: Mo 11. Apr 2005, 14:59
Kontaktdaten:

Danke

Beitrag von minihops » So 24. Apr 2005, 09:42

Danke emergence!
Das war's ! Jetzt funktionierts einwandfrei!
Danke für die Schnelle Hilfe!

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mi 27. Apr 2005, 19:30

Tja, leider ist das nur die halbe Miete. Wird z.B. der folgende HTML-Code als Layout verwendet, tritt ein Fehler auf:

Code: Alles auswählen

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php
   $sql = "SELECT User.realname AS realname, Article.lastmodified AS lastmodified FROM " . $cfg["tab"]["art_lang"] . " Article, " . $cfg["tab"]["phplib_auth_user_md5"] . " User WHERE Article.idart='$idart' AND User.username = Article.modifiedby" ;

   $db->query($sql);
?>
</body>
</html>
Der Fehler:
PHP Fatal error: Call to a member function on a non-object in /homepages/4/d69320680/htdocs/contenido/classes/class.htmlvalidator.php(56) : eval()'d code on line xy
Zu beachten ist, dass die Angabe zu line xy sich nicht auf die Zeile in class.htmlvalidator.php bezieht, sondern sich tatsächlich auf den HTML-Code bezieht (hier wäre es übrigens 12).

Wenn der Fehler auftritt, erscheint übrigens nicht die Layout-Seite mit den entsprechenden Feldern für Name, Beschreibung und Quelltext, sondern nur der HTML-Code bis zu der Stelle, an der der Parse-Error aufgetreten ist.

Ursache für den Fehler ist hier das Objekt $db, denn es ist nicht instanziiert. Der folgende Code funktioniert:

Code: Alles auswählen

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php
   $sql = "SELECT User.realname AS realname, Article.lastmodified AS lastmodified FROM " . $cfg["tab"]["art_lang"] . " Article, " . $cfg["tab"]["phplib_auth_user_md5"] . " User WHERE Article.idart='$idart' AND User.username = Article.modifiedby" ;

   $db = new DB_Contenido;
   $db->query($sql);
?>
</body>
</html>
Gruß
HerrB
Zuletzt geändert von HerrB am Mi 27. Apr 2005, 21:13, insgesamt 1-mal geändert.
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

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mi 27. Apr 2005, 19:42

Den Bugfix würde ich nicht einbauen. Wenn ein Layout das Contenido-DB-Objekt verwenden möchte, so soll es dieses auch instanziieren. Die Annahme, daß Objekte schon vorinstanziiert im lokalen Scope liegen, ist einfach "bad practice" und sollte nicht verwendet werden.

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mi 27. Apr 2005, 20:30

@HerrB
timo hat da recht...

wer php code im layout verwendet soll selbst dafür sorge tragen das die $db variable richtig definiert ist...

ein $db = new DB_Contenido(); schadet nicht...

die fehlermeldung mit
PHP Fatal error: Call to a member function on a non-object in /homepages/4/d69320680/htdocs/contenido/classes/class.htmlvalidator.php(56) : eval()'d code on line xy

könnte man noch so umbauen wie in der modul check funktion...
intressant ist ja nur das
PHP Fatal error: Call to a member function on a non-object ...
eval()'d code on line xy
*** make your own tools (wishlist :: thx)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mi 27. Apr 2005, 21:11

Ja, ich hatte nur gerade keine Zeit, das zu testen, war ein gutes Argument.

Und warum war es nicht instanziiert? Weil die Module des Bespielmandanten $db auch nicht ... nun ja, wieder was dazugelernt. :wink:

Ja, mit korrekter Definition geht es (nur zur Info).

Ansonsten, ja, gute Idee, das wie bei den Modulen umzubauen, denn z.Z. bedeutet jedes fehlerhafte PHP in einem Layout, dass der Layout-Code nicht mehr bearbeitet werden kann (da - wie erwähnt - der Layout-Code ausgegeben wird, ohne die eigentlichen Felder für die Layout-Bearbeitung). Man kann es nur noch löschen.

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

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mi 27. Apr 2005, 21:14

Ich habe den Text oben geändert, nicht das jemand auf den gleichen Gedanken kommt...

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

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mi 27. Apr 2005, 21:15

Naja, die Beispielmodule sind echt...grottig ;)

Ich glaube, der PHP Parser steigt generell bei "Call to a member function on a non-object" aus...das Problem hatte ich schonmal, daß auch Module nicht mehr editierbar waren, aber genau weiß ich es nicht mehr

Komischerweise läuft er bei einem Syntaxfehler weiter

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mi 27. Apr 2005, 21:16

na wie auch immer

ne kleinigkeit ist mir bei der klasse sowieso noch nicht klar

es sollte ja gecheckt werden ob zb </head> oder </body> vorhanden ist... oder nicht ? geht irgendwie nicht..
zumindestens erhält man keinerlei meldung...

oder hab ich die klasse falsch interpretiert... ?
*** make your own tools (wishlist :: thx)

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mi 18. Mai 2005, 14:27

Die Klasse ist ein HTML-Validator. Sprich, sie überprüft die Syntax des übergebenen Strings. Sie überprüft aber keinen Doctype oder die Gesamtstruktur des Dokuments. Wenn sie das machen würde, wäre es nicht möglich, Teilstrings zu validieren.

Was man natürlich noch bei der Klasse verbessern könnte (und ich warscheinlich auch noch machen werde): Eine Funktion, die zurückliefert, ob ein bestimmter Tag vorhanden ist, damit man im Layout dann auch eine Fehlermeldung ausgeben kann.

Gesperrt