Seite 1 von 1

layout problem

Verfasst: Do 24. Nov 2005, 16:25
von helpmeplease
hallo,

ich kann seit kurzem die layouts nicht mehr im backend bearbeiten bzw. aufrufen; es kommt keine fehlermeldung, die textarea felder werden einfach nicht mehr angezeigt.

grund ist folgender php-code im head bereich des layouts:

Code: Alles auswählen

 $url = $_SERVER['REQUEST_URI'];
 $pauschalen = "";
 $parts_url = split("/", $url);
 $link1 = "";
 for($i=1; $i<count($parts_url)-1; $i++) $link1.="/".$parts_url[$i];
 //list($url_name, $url_idcat, $url_idart, $url_zeit, $url_bereich) = split("-", $parts_url[count($parts_url)-1]);
 global $url_name, $url_idcat, $url_idart, $url_zeit, $url_bereich;
 $sess->register("url_name");
 $sess->register("url_idcat");
 $sess->register("url_idart");
 $sess->register("url_zeit");
 $sess->register("url_bereich");
 $split = split("-", $parts_url[count($parts_url)-1]);
 if (count($split)==5) {
  if (isset($split[0])) $url_name    = $split[0];
  if (isset($split[1])) $url_idcat   = $split[1];
  if (isset($split[2])) $url_idart   = $split[2];
  if (isset($split[3])) $url_zeit    = $split[3];
  if (isset($split[4])) {
   $url_bereich_split = split("\.", $split[4]);
   if (isset($url_bereich_split[0])) $url_bereich = $url_bereich_split[0];
  } 
 }
 $link1.= "/".$url_name."-".$url_idcat."-".$url_idart."-";
 $link2 = "-".$url_bereich.".html";
auszug bzw. ist dieser teil für die fehlfunktion verwantworlich; d.h. kopier ich das ganze raus (per phpmyadmin) dann kann ich das layout bearbeiten . ist dieser bereich des codings drinnen kann ich die layouts nur noch über phpmyadmin bearbeiten ...

die front-end seite arbeitet problemlos und auch im coding kann ich keinen fehler finden. meine vermutung ist ein contenido-bug ...

vielleicht weiss jemand was dazu ...

Verfasst: Do 24. Nov 2005, 18:29
von timo
prüfe ob der code extern läuft...d.h. keine parse-errors erzeugt

ggf errorlog.txt gegenchecken

Verfasst: Do 24. Nov 2005, 23:42
von helpmeplease
Der Code hat keine Parse Errors, aber selbst wenn er welche hätte müsste es auf jeden Fall möglich sein, den Code innerhalb von Contenido zu bearbeiten. Im Frontend kommt es auch zu keinen Problemen. Alles funktioniert wie gewollt.
Im Contenido Admin Bereich wird die Auswahl für die vorhandenen Layouts ganz normal angezeigt. Sobald aber dieses Layout mit dem unten geposteten Coding ausgewählt wird kommt es zu einem Abbruch (Die Seite kann nicht angezeigt werden). Daher gibt es auch keine Fehlermeldungen.
Im errorlog.txt File gibts auch keine Hinweise.

Es muss also zu einem Server Error beim Aufbau der Seite: "main.php?area=lay_edit&frame=4&idlay=5" kommen.

Verfasst: Fr 9. Dez 2005, 14:43
von david
Hallo,
gibt es zu diesem Problem eine Lösung?
Ich habe nämlich einen ähnlichen Fehler - Fehlermeldungen unter Administration - System sind keine vorhanden. Sobald ich im Layout einen php-Code hinzufüge, kann ich das Layout in Contenido nicht mehr bearbeiten, weil es nicht mehr angezeigt wird. Im Frontend funktioniert es allerdings problemlos.
lg
david

Verfasst: Fr 9. Dez 2005, 15:06
von silicone
Das Problem hatte ich auch, als ich versucht habe, mit Flaggen für Sprachen im Layout zu arbeiten. Hatte den Code für die Flaggen hier aus dem Board.
Danach war nix mehr mit Layout editieren :(

Mit der 4.4 ging es, ab 4.5 nicht mehr...

Verfasst: Mi 28. Dez 2005, 19:48
von Stefan_Br
Habe das gleiche Problem:

Bei bestimmtem php-Code im Layout lässt sich dieses nicht in der Editieransicht anzeigen; stattdessen bricht die Ausführung der Backend-Skripte ab.

Meinen Forschungen zu Folge ist die Zeile

Code: Alles auswählen

$resultingHTML = preg_replace('/<\?(php)?((.)|(\s))*?\?>/i', '', $html);


in der Funktion cleanHTML in der Datei class.htmlvalidator.php schuldig.

Warum genau habe ich nicht untersucht, weil es mir ohnehin nicht sonderlich sinnvoll vorkommt, einfach den php-Code zu entfernen, weil der ja anscheinend auch bei der Vorschau ausgeführt wird, für die ja die Validation letztlich ist. Außerdem kann dies ja leicht zu unberechtiogten Fehlermeldungen führen, weil es ja gut sein kann, dass das html erst durch die php-Ausgaben valide wird bzw. sonst ein Teil fehlt.

Deshalb habe ich folgende Korrektur vorgenommen, die bei mir das Problem gelöst hat:
Besagte Zeile habe ich durch Folgendes ersetzt:

Code: Alles auswählen

         ob_start(); 
         eval(" ?> ".$html." <?php "); 
         $resultingHTML = ob_get_contents(); 
         ob_end_clean(); 



Damit wird der php-Code einfach ausgeführt, bevor das Ganze validiert wird. Hier kann es natürlich auch passieren, dass mangels Parametern, die im eigentlichen da sind, ungültiges html herauskommt; es ist aber richtig, dass dies dann bemängelt wird, weil dies ja auch eine Vorschau behindern würde. Die Meldung könnte für den unbedarften Nutzer trotzdem verwirrend sein, ebenso wie die Zeilenangaben in den Fehlermeldungen, die nicht stimmen, sobald php-Code entfernt oder ausgeführt wird.

Außerdem bemängelt der Validator zumindest in 4.6.2 ein fehlendes öffnendes Tag nicht, solange ein schließendes vorhanden ist.