Hi Daniel,
das Problem ist nur, dass die Liste dann trotzdem noch in einem Paragraph-Absatz liegt.
Wenn ich eine neue Seite anlege und in den frischen, bis dato unangetasteten DOM-Editor reinklicke passiert erstmal garnichts - soweit so gut. Sobald ich nun aber auf das Icon "Liste einfügen" klicke, wird ein neuer Absatz (<p>) erzeugt und dort die Liste reingelegt. Der Redaktur hat an dieser Stelle keine Chance das erzeugen des <p>-Absatzes zu verhindern, außer er wählt vor dem Einfügen der Liste für den Absatz eine andere Formatvorlage (anstatt <p>, eine eigene, die keinen Tag erzeugt).
Wie bereits geschrieben, würde ich dem Redakteur nicht zumuten wollen, an diesen Stellen für valides HTML sorgen zu müssen. Wir haben zwar sehr fähige Redakteure, jedoch können sich bei einer Vielzahl von verschiedensten Inhalten doch mal schnell Fehler einschleichen.
Daher mein Workaround mit dem Script, das <p>-Tags nur zulässt, sofern keine blockerzeugenden Elemente enthalten sind.
Für alle Interessierten hier noch die Vorgehensweise:
1. Erstellung Script "remove_invalid_paragraph_tag"
import java.util.regex.Matcher;
import java.util.regex.Pattern;
String content = context.getProperty("content");
String invalidTags = "(<p>|<pre>|<table>|<ul>|<ol>|<h1>|<h2>|<h3>|<h4>)";
Pattern pattern = Pattern.compile(invalidTags, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(content);
if (!matcher.lookingAt()) {
result.setValue("<p>" + content + "</p>");
} else {
result.setValue(content);
}
2. Änderung Inhalt Formatvorlage "Standard" (p)
von:
<p>$CMS_VALUE(#content)$</p>
auf:
$CMS_RENDER(script:"remove_invalid_paragraph_tag", content:#content.toString)$
So wird der <p>-Tag nur um den Inhalt herumgesetzt, solange keine Block-Elemente enthalten sind.
Der String "invalidTags" muss bei Bedarf noch erweitert werden.
Alle Block-Elemente werden z.B. bei selfhtml aufgelistet (http://de.selfhtml.org/html/referenz/elemente.htm#block_elemente).
Viele Grüße
Philipp