Insite-Editing: valides XHTML erzeugen
Verfasst: Mo 19. Dez 2005, 21:58
Da mich die Schwierigkeiten was valides XHTML angeht in Verbindung mit dem Insite-Editing und mehreren CMS_HTML-Containern (oder auch CMS_HTMLHEAD) ziemlich nerven, habe ich mal versucht, den klassischen Problemen beizukommen. Als Ansatz habe ich eine den Contenido Extension Chainer benutzt, weil ich nichts an Contenido selbst ändern wollte und der Inhalt aller o.g. CMS-Typen ja bei jedem Klick auf "Save" oder auch "Text HTML" neu gespeichert wird.
Die neue Chain packt man in die Datei "include.chain.content.html2xhtml.php" im Verzeichnis "contenido/plugins/chains/includes/" mit folgendem Inhalt (zuletzt geändert 30.01.2007 15:53):
Die Chain muss weiterhin eingebunden werden in der Datei "config.plugin.php" im selben Verzeichnis durch:
Vielleicht hat mal jemand Zeit, das zu testen. Bei meinen Tests macht das zwar keine Probleme mehr, aber ich würde noch vom Einsatz in Live-Systemen abraten.
Zurzeit werden:
Die neue Chain packt man in die Datei "include.chain.content.html2xhtml.php" im Verzeichnis "contenido/plugins/chains/includes/" mit folgendem Inhalt (zuletzt geändert 30.01.2007 15:53):
Code: Alles auswählen
<?php
function cecContentHtml2Xhtml ($idartlang, $int2, $int3, $string)
{
global $cfg;
/* Cache the XHTML setting for performance reasons */
if (!is_array($cfg) || !array_key_exists("generate_xhtml", $cfg))
{
if (function_exists("getEffectiveSetting"))
{
$cfg["generate_xhtml"] = getEffectiveSetting("generator", "xhtml", false);
} else {
$cfg["generate_xhtml"] = false;
}
}
if ($cfg["generate_xhtml"] === "false")
{
$cfg["generate_xhtml"] = false;
}
if ($cfg["generate_xhtml"] == true)
{
$string = preg_replace ("/(<\/?)(\w+)([^>]*>)/me"
,"'\\1'.strtolower('\\2').cecContentHtmlAttr2Xhtml('\\3')"
,$string
);
$string = preg_replace ("/(<)(area|base|basefont|br|col|frame|hr|img|input|isindex|link|meta|param)([^>]*?)((?<!\/)>)/m"
,"\\1\\2\\3 />"
,$string
);
}
return $string;
}
function cecContentHtmlAttr2Xhtml ($string)
{
$string = stripslashes ($string);
$string = stripslashes (preg_replace ("/(\w+)(\=)([\"|\'])([^\"']+)([\"|\'])(\s)/me"
,'strtolower("\1")."=\"\4\" "'
,$string
));
$string = stripslashes (preg_replace ("/([\s]([\w]+)[\s]+)(?!\=[\"\'])(?=[\/]?[>]|[\w\s]+[\=])/me"
,' '.strtolower('\\2').'="'.strtolower('\\2').'"'
,$string
));
$string = stripslashes (preg_replace ("/([\s]([\w]+)[\s]+)(?!\=[\"\'])(?=[\/]?[>]|[\w\s]+[\=])/me"
,' '.strtolower('\\2').'="'.strtolower('\\2').'"'
,$string
));
return $string;
}
?>
Code: Alles auswählen
cInclude("plugins", "chains/includes/include.chain.content.html2xhtml.php");
$_cecRegistry->addChainFunction("Contenido.Content.SaveContentEntry", "cecContentHtml2Xhtml");
Zurzeit werden:
- Tags und Attribute in Kleinschreibung umgewandelt,
- einzelstehende Tags (br,hr,base,img,input,meta,link) von "<br>" in "<br />" umgewandelt und
- Attribute ohne Wert (z.B. "selected") in die korrekte Schreibweise (selected="selected") überführt