[latex]Mae govannen![/latex]
Gleich vorab: Auf alles kann und will ich nicht eingehen.
Habe ich bei der Größe auch nicht erwartet. Jede Verbesserung hilft.
Besonders wenig Lust habe ich immer, mich in fachliche Fragen einzuarbeiten, wenn mich das Thema nicht wirklich interessiert und, so wie in deinem Fall, zu wenig erläuternde Kommentare enthalten sind. Kommentare sollen erklären, was mit dem nächsten Codeabschnitt erreicht werden soll. Im Idealfall kann durch eine "Übersetzung" des Kommentars in Code auch ein fachfremder Programmierer die Richtigkeit des Codes beurteilen.
Da die Klasse bisher immer wieder umgebaut wurde/wird, habe ich mich da bisher eher zurückgehalten. Die Kommentare sind daher bisher eher ein sehr grober Anhaltspunkt. Ok, für 'euch' ist das ungünstig, das sehe ich ein. Ich hatte aber beim Schreiben meines Beitrages auch eher allgemeine Fehler, die unabhängig von der tatsächlichen Funktion der Klasse ins Auge stechen, im Kopf. Einiges hast du diesbezüglich ja auch schon angesprochen.
Eine XSL-Transformation kommt nicht in Frage? Du hast ja XML vorliegen und willst sowas ähnliches auch wieder haben, da bietet sich sowas an.
Oh ja, viel (PHP)Arbeit hätte ich mir sparen können, wenn mein Hoster XSLT anbieten würde. Andererseits: Nur durch Versuche wie mit dieser Klasse lernt man schließlich auch etwas.
Ansonsten erscheint es mir recht aufwendig, erst solch einen umfangreichen XML-Code zu erzeugen. Das ist alles Fleißarbeit beim Tippen. Ich hätte wohl eher eine Notation in einer PHP-Datenstruktur gewählt. Die kommt mit weniger Overhead-Zeichen aus und könnte dadurch auch verständlicher und weniger erschlagend wirken, wenn man sie erblickt.
Ich habe viel mit Copy&Paste (Nicht zu verwechseln mit Smith&Wesson :> ) gearbeitet, damit hielt sich die Arbeit in Grenzen.
Angefangen hatte ich mit verschachtelten assoziativen Arrays, aber irgendwas hat mich da gestört. Dummerweise weiß ich nicht mehr, was.
Das ist komplett überflüssig. Variablen bereinigt PHP von selbst. Der Destruktor wäre sinnvoller angewendet, wenn externe Ressourcen geschlossen werden müssen.
Ok, das ist eine dumme Angewohnheit aus einer anderen Sprache, wo man sich nicht immer aufs Aufräumen verlassen konnte.
$this->set_ec(self::MENU_FILE_NOT_FOUND);
Exceptions wäre auch eine zu überlegende Alternative. Dann muss der anwendende Code nicht erst nachfragen, welcher Fehler aufgetreten ist, sondern kann sich diese Information gleich aus den Exception-Daten holen.
Ich habe die Exception-Seiten auf php.net auch schon flüchtig angeschaut, bin aber bisher nicht nicht tiefer eingestiegen. Wieder mal: Ich habe mit PHP so viel zu lernen, daß mir eh schon der Schädel brummt.
/* Vergleicht die aktuelle Seite mit dem gerade bearbeitetetn Menüpunkt. Wenn duese gleich sind, wird
true zurückgegeben, sonst false */Man sollte auch Kommentare korrekturlesen :-)
Man sollte vor Allem eine neue Tastatur besorgen, auf der dann auch noch mehr zu erkennen ist als Q Ü Ö Ä J Y X und V
(alle restlichen Buchstabentasten sind inzwischen blank) :(
/* Experimentell - HTML-Enities und numerische Zeichencodes, die sich im XML befinden, umwandeln */
[...]
return (!empty($str)) ? htmlentities(utf8_decode(html_entity_decode($str))) : '';
Mit dieser Zeile gehen dir zuerst die Nicht-ISO-8859-1-Zeichen verloren. Anschließend hast du einen Mischmasch aus den UTF-8-kodierten Daten aus dem XML und den nach ISO-8859-1 umgewandelten Entitys vorliegen, den du von UTF-8 nach ISO-8859-1 umzukodieren versuchst, um dann das was noch übrig geblieben ist, unnötigerweise in Entitys umzuwandeln.
Ja, wie im Kommentar angemerkt noch experimentell, funktioniert noch nicht so recht, wie ich es will. Daran arbeite ich zur Zeit noch (d.h. doku lesen) Ich habe es z.B. bisher noch nicht geschafft, die XML-Zeile <irgendwas>a & b</irgendwas>
sowohl richtig anzeigen zu lassen wie auch valide (XHTML 1.0 strict). Bisher bin ich am & gescheitert. Aber wie gesagt, bin noch nicht so firm in PHP und gerade mit dieser ganzen Umwandelei noch etwas überfordert. Mit meiner etwas seltsamen Funktion habe ich zwar beide Ziele erreicht, aber daß sie so nicht bleiben kann, ist mir klar. Ich muß nur noch auf die richtige(n) Funktion(en) stossen und diese dann ggf. richtig kombinieren...
Du berücksichtigst die charset-Parameter der Funktionen nicht. Außerdem solltest du berücksichtigen, dass fast alle XML-Tools UTF-8 haben wollen. Selbst wenn du ihnen was anderes vorsetzt und ihnen das so mitteilst, werden sie dir das Ergebnis als UTF-8 liefern (wollen). Manchmal kann man das auch nicht umkonfigurieren. Es ist jedoch immer eine gute Idee, auch mal Nicht-ASCII-Zeichen beim Testen zu verarbeiten. Solche vermisse ich in deiner testmenu.xml.
In der angewendeten XML-Datei für mein Site-Menü sind zumindest Umlaute enthalten. Diese werden zur Zeit leider noch als Entities ausgegeben, aber im XML stehen sie als Umlaute. Ich habe im Vorfeld durchaus überlegt, ob ich zuerst den Beitrag verfasse, mit dem dieser Thread startet, oder einen Beitrag, der sich speziell auf das Problem mit Zeichenumwandlung aus dem XML heraus beschäftigt.
Aber ihr werdet mich schon zusammenstauchen ^^
Jo, das gibt es hier wie üblich gratis.
Das verläßliche Element an diesem Forum ;). So, jetzt mache ich mich mal an die Änderungen, soweit ich sie bereits umsetzen kann.
Danke.
Cü,
Kai
YouTube Video-Tipp: Harmonic Curves
YouTube Video-Tipp: Pipe Dreams
selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?