Wie in der Praxis aufgefallen ist hat Smarty einen erheblichen Nachteil, dann nämlich wenn bei der Bearbeitung im laufenden Betrieb ein Anwender einen Fehler z.B. bei einem Aufruf macht.
Das kann dazu führen das z.B. über das Haupttemplate nur ein Fehler angezeigt wird, Rest bleibt blank.
Oder es wird ein Fehler ausgeworfen und die Umlaute verschwinden, weil mit dem Auswurf der Meldung ein Header gesendet wurde - der Standard - UTF-8 Header wird dann nicht mehr gesendet.
Deswegen die Änderung:
der Contructor wurde erweitert, beim Init über fileloc wird der Wert aus der config $config['contenttype']='text/html;'; übergeben.
Der Header wird nun gesendet - falls nicht über andere Stellen bereits vorher etwas abgeliefert wurde.
Die interne Smarty Funktion trigger_error wurde so geändert, das auch ein paar zusätzliche Informationen geschickt werden.
Der Errortyp wurde auf E_USER_NOTICE geändert.
Wenn nun ein Smarty Fehler auftritt bleibt die CMS nicht stehen, es sei denn es handelt sich um einen fatalen PHP Fehler der von PHP geahndet wird.
Und nun kommt's:
Die Fehlermeldungen kommen nur ein einziges Mal, alles andere läuft weiter.
Die Meldungen sind entweder nur in der Quelltextangabe zu sehen oder direkt in der Ausgabe, das hängt davon ab an welcher Stelle etwas passiert.
Danach werden zwar die fehlerhaften Funktionen nicht ausgeführt, es erscheinen aber auch keine Meldungen. Die kommen auch nur dann wieder, wenn der Cache gelöscht wurde.
Beispiel:
Fehler : {blob_ name='Info'} im Haupttemplate blob_ statt blob.
Notice: in <strong>_trigger_fatal_error</strong> called from <strong>/var/www/l9/lib/smarty/Smarty_Compiler.class.php</strong> on line <strong>2228</strong>
<br />Smarty error: [in template:56 line 18]: syntax error: unrecognized tag 'blob_' (Smarty_Compiler.class.php, line 589) in /var/www/l9/lib/smarty/Smarty.class.php on line 1072
Diese Meldung ercheint nicht sichtbar, da Einsatz im Metabereich.
display externes Template existiert nicht:
Notice: in <strong>_fetch_resource_info</strong> called from <strong>/var/www/l9/lib/smarty/Smarty.class.php</strong> on line <strong>1388</strong>
<br />Smarty error: unable to read resource: "am1.tpl_" in /var/www/l9/lib/smarty/Smarty.class.php on line 1072
Die Meldung erscheint sichtbar, da im Inhaltsbereich.
Entscheiden ist für mich in einer Produktivumgebung, das das Web wenn schon nicht auf allen Zylindern aber mit den Rest weiter läuft und das auch die Umlaute gezeigt werden.
Ich meine - es ist eine klare Verbesserung.
Version ist im Download.