Hallo,
Noch kapier ich das zweite Template ("break") nicht ganz. Denn im Quelltext sollte kein Umbruch vorkommen..
"
Nach langem Suchen und Lesen in Forum und Selfhtml habe ich zwar Möglichkeiten gefunden, in XML vorhandene Zeilenumbrüche zu setzen und auszulassen, aber wie ich neue in den Output bringe, hab ich leider nicht gefunden.
"
Also ging ich davon aus, dass du auch in deinem Text in XML Zeilenumbrüche hast.
Gehe ich recht in der Annahme, dass es dann überflüssig ist? Bzw. dass nur das value-of, aber dann von textbeforebreakgebraucht wird?
Wenn keine Zeilenumbrüche in Text vorkommen, dann ja.
<xsl:template name="addbreak">
<xsl:param name="text" />
<xsl:variable name="textbeforebreak" select="substring($text, 1, 72)" />
<xsl:variable name="textafterbreak" select="substring($text, 73)" />
xsl:choose
<xsl:when test="string-length($text) > 72">
<xsl:value-of select="$textbeforebreak" />
<br />
<xsl:call-template name="addbreak">
<xsl:with-param name="text" select="$textafterbreak" />
</xsl:call-template>
</xsl:when>
xsl:otherwise
<xsl:value-of select="$text" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Ein ernsthafteres Problem sind die Wortgrenzen. Die sollten schon eingehalten werden. Das Template dürfte also keine Wörter auseinanderreissen..
Ich dachte schon, dass das kommen wird, aber gesagt hast du es nicht.
»»Versuche gerade, den textafterbreak auf Zeichen zu Beginn zu testen und ev. direkt anschliessende Zeichen noch vor dem Break anzufügen.. Hoffe das klappt.. Hast du einen einfacheren Vorschlag?
Es gibt im Archiv ein Template von mir, der genau diese Funktion erfüllt: überprüft ob beim Trennen ein Wort betroffen ist (bzw. ein Zeichen das nicht ein Leerzeichen ist) und trennt erst beim nächsten Leerzeichen im Text.
Du kannst diesen Template nehmen und mit "addbreak" kombinieren.
Grüße
Thomas