Teaser nach bestimmter Anzahl an WÖRTERN abschneiden
am 16.08.2008 - 12:13 Uhr in
Drupal erstellt den Teaser automatisch bis zur maximal eingestellten Länge.
Bei mir ist es aber leider so, dass wenn ein User 2 aufeinanderfolgende Absätze erstellt, und der zweite Absatz ist zu lang um noch reinzupassen, nur der erste Absatz in den Teaser kommt.
Beispiel:
Full Node:
Curabitur arcu. Phasellus faucibus vulputate orci.
Donec blandit tempor dolor. Nullam felis lacus, hendrerit at, elementum at, interdum et, ante. Morbi aliquam pellentesque urna. Aliquam quis velit sed tellus eleifend tristique. Nullam tincidunt pede vel massa. Vivamus purus sapien, semper a, feugiat vitae, lacinia ut, nibh. Aliquam eu leo. Aliquam lacinia scelerisque purus. Suspendisse potenti. Vestibulum in eros. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam facilisis eleifend erat. Vivamus auctor felis ullamcorper orci sollicitudin egestas. Fusce faucibus lacus eget nulla. Duis dui.
Teaser:
Curabitur arcu. Phasellus faucibus vulputate orci.
Wie ihr seht ergibt das einen unschönen Teaser.
Gibt es eine Möglichkeit die Teaser so zu gestalten, dass eine bestimmte anzahl an Wörtern mit in den Teaser kommen, und danach dann das bekannte ... ? Im Moment kann ich in den Beitragseinsellungen lediglich zwischen 200 Zeichen und 400 Zeichen wählen...
Man könnte natürlich manuell den Teaser mit <!--Break-->
und so weiter verändern. Aber es würde viel Arbeit erfordern jeden einzelnen Node separat zu ändern. Außerdem würde der User gleich nach dem Erstellen des Nodes oft einen unschönen Teaser sehen...
P.S.: Muss man die Anzahl der Zeichen zählen und danach als letzte Zeichen das ... hinzufügen?
- Anmelden oder Registrieren um Kommentare zu schreiben
mit contemplate und einem kleinen Eingriff in die template.php
am 16.08.2008 - 12:26 Uhr
Den folgenden Code habe ich der Datei template.php hinzugefügt.
/**
* TEASER optimieren Start
*/
function srtstr($str, $length, $id) {
$str = str_replace("<br />", "", $str); // Vorhandene Zeilenumbrüche löschen
$str = str_replace("<li>", "• ", $str); // Listen Elemente in Listenpunkte umwandeln
$str = strip_tags($str); // HTML und PHP Elemente aus String entfernen
$str = nl2br($str); // Normale Zeilenumbrüche wieder in <br />'s umwandeln
$str = str_replace("<br />", "<br/>", $str); // <br /> in <br/> ändern, um vorläufig Leerzeichen zu entfernen
$str = explode(" ", $str); // Alle vorhandenen Wörter im String als Array machen
if($length >= (count($str))-4) {
// Wenn die Länge der angegebenen Wörter größer ist, als die Wörter Anzahl minus 4, dann kompletten Text anzeigen
for($i = 0; $i < count($str); $i++) {
$str = str_replace("<br/>", "<br />", $str); // <br/>'s wieder in normale <br />'s umwandeln
echo $str[$i]." "; // Ausgabe aller Wörter mit einem Leerzeichen dahinter
}
} else {
// Wenn die Länge der angegebenen Wörter nicht größer ist, als die Wörter Anzahl minus 4, dann gekürzten Text anzeigen
for($j = 0; $j < $length; $j++) {
$str = str_replace("<br/>", "<br />", $str); // <br/>'s wieder in normale <br />'s umwandeln
echo $str[$j]." "; // Ausgabe aller Wörter mit einem Leerzeichen dahinter
}
echo ' … <a href="'.$path.'">[Weiter]</a>'; // Ausgabe des Links zum gesamten Artikel
}
}
/**
* TEASER optimieren Ende
*/
Über das Modul Contemple gestalte ich die Teaser der jeweiligen Inhaltstypen.
Beispiel:
Ich setze im Feld "Affect teaser output" des Inhaltstypes "blogbweitrag" den folgenden Code ein:
In diesem Beispiel werden die ersten 30 Worte aus dem Body für den Teaser verwendet.
<?php srtstr($node->content['body']['#value'], 30, $node->nid);
?>
So wird auf die obengenannte Funktion in der Template.php zurückgegriffen.
Gruß Jonas
Klasse! Jedoch funktionieren
am 16.08.2008 - 13:17 Uhr
Klasse! Jedoch funktionieren dadurch auch keine Eingabeformate mehr, wie BBCode usw. Kann man das noch ändern? Wenn ich die Zeile
$str = strip_tags($str); // HTML und PHP Elemente aus String entfernen
auskommentiere macht der text komische Zeilenabstände...
In den Teasern hätte ich es gerne schon genau so, aber im Full Node View funktioniert der BBCode dann auch nicht mehr...
Das
am 16.08.2008 - 13:28 Uhr
Das http://drupal.org/project/ed_readmore macht dein ... oder mehr.
----------------------------------------
Alle Angaben ohne Gewähr!!:D
http://www.tobiasbaehr.de/
drupaler3000
am 19.08.2008 - 21:12 Uhr
Klasse! Jedoch funktionieren dadurch auch keine Eingabeformate mehr, wie BBCode usw. Kann man das noch ändern? Wenn ich die Zeile
$str = strip_tags($str); // HTML und PHP Elemente aus String entfernen
auskommentiere macht der text komische Zeilenabstände...
In den Teasern hätte ich es gerne schon genau so, aber im Full Node View funktioniert der BBCode dann auch nicht mehr...
Ich nehme es wieder zurück! Irgendwie funktioniert jetzt wieder alles! ich weiß nicht warum, aber nachdem ich jeden einzelnen node noch mal bearbeitet(ohne änderungen) und neu abgespeichert habe, sind die formate wieder da!