Nachdem mich die Tatsache etwas störte, dass ich in Texten keine <br> verwenden dürfte, habe ich nach einer anderen Lösung gesucht.
Hiermut sollte es möglich sein, alle Tags auch in Texten verwenden zu können:
Code:
if(strlen($this->text) < 500){
echo $this->text;
} else{
$this->text = preg_replace('/^(.*?)\\0(.*)$/is', '$1', wordwrap( $this->text, 500, "\0" ));
echo $this->text." ..."; // hier wird $this->text ausgegeben und die Punkte angehängt
}
Was passiert hier?
Code:
if(strlen($this->text) < 500)
Zählt die Anzahl der Zeichen im String und leitet bei einer Anzahl größer 499 Zeichen das Kürzen des Strings ein. Wenn die Anzahl kleiner 500 Zeichen wird der String direkt ausgegeben.
Code:
wordwrap( $this->text, 500, "\0" )
Sorgt dafür, dass alle 500 Zeichen (anpassbar) ein ASCII-Code für die Zahl 0 eingefügt wird. Die 0 gibt es als ASCII nicht, wir können es hier aber prima als Seperator verwenden und ausnutzen.
Wordwrap sorgt zudem dafür, dass das ASCII-Zeichen am Ende eines ganzen Wortes eingefügt wird. Es kann als auch sein, dass das erst nach 512 Zeichen passiert, je nach Länge des Wortes.
Code:
preg_replace('/^(.*?)\\0(.*)$/is', '$1',
Sucht mit einem regulären Ausdruck nach dem ASCII-Zeichen und teilt den Text in einzelne Abschnitte ein (z.B. 1. Teil = $1 : 2. Teil = $2 usw.). Uns interessiert aber nur der Teil vor dem ersten ASCII-Zeichen, daher sprechen wir diesen Teil mit $1 an und schreiben ihn zurück in den String ($this->text).
Auf die Definition des regulären Ausdruckes gehe ich nicht weiter ein, dafür gibt genügend Lesestoff im Netz.
Für $this->text kann natürlich jeder x-beliebige String definiert werden, ergo ist es auch in anderen Modulen (Templates) einfach zu verwenden.
Lesezeichen