Hallo,
ich habe das Template ce_teaser abgeändert. Da ich von PHP gerade mal ein Grundverständnis habe, bitte ich die PHP-Cracks unter euch, mal meine Lösung anzusehen. Stimmt das alles so? Hier die Aufgabe:
Standardmäßig steht bei einem Artikelteaser der "Weiterlesen"-Link in einer eigenen Zeile nach dem Teasertext. Also:
text text text text
text text.
Weiterlesen ...
Nun wollte ich die Frontend-Ausgabe so verändern, dass der "Weiterlesen"-Link nicht in einer eigenen Zeile nach dem Teasertext steht, sondern gleich im Anschluss an das letzte Teaser-Wort (bzw. das Satzzeichen). Also so:
text text text text
text text. Weiterlesen ...
In dem Template ce_teaser ist folgende Zeile für die Textausgabe zuständig:
PHP-Code:
<?php echo $this->text; ?> <a href="<?php echo $this->href; ?>" class="more"><?php echo $this->more; ?></a>
Und als HTML ausgegeben:
HTML-Code:
<p>text text text text text text.</p>
<a href="..." class="more">Weiterlesen ...</a>
Der ungewünschte Zeilenumbruch entsteht also, weil der Zeichenstring aus $this->text mit einem </p>-Tag abgeschlossen wird. Mein erster Ansatz war, dieses </p>-Tag zu entfernen bzw. durch ein Leerzeichen zu ersetzen. Der abschließende </p>-Tag muss dann stattdessen hinter dem Link stehen:
PHP-Code:
<?php echo str_replace("</p>"," ",$this->text); ?> <a href="<?php echo $this->href; ?>" class="more"><?php echo $this->more; ?></a></p>
Das funktioniert wohl auch, wenn es im Teasertext nur einen Absatz gibt. Bei mehreren Absätzen werden aber alle ersetzt, das ist ja nicht gewünscht.
Stattdessen habe ich nun den ausgegebenen Teaser-String um die letzten vier Zeichen gekürzt. Damit wird tatsächlich nur das letzte </p>-Tag der letzten Textzeile entfernt. Die geänderte Zeile im PHP-Code sieht nun so aus:
PHP-Code:
<?php echo substr($this->text, 0, strlen($this->text)-4); ?> <a href="<?php echo $this->href; ?>" class="more"><?php echo $this->more; ?></a></p>
Und in HTML:
HTML-Code:
<p>text text text text text text. <a href="..." class="more">Weiterlesen ...</a></p>
Das Ergebnis ist also genau so, wie ich es mir gewünscht habe. Trotzdem noch einmal die Frage an alle, die sich mit PHP besser auskennen als ich: Ist das eine richtige und saubere Lösung? Oder ginge es sogar noch viel einfacher?
Besten Dank,
der Graf
Lesezeichen