Wie man auf der Startseite und den Archivseiten meines Blogs sehen kann werden lange Beiträge nach dem zweiten Absatz (bzw. um genau zu sein nach dem zweiten Element, kann auch eine Tabelle oder Liste sein) abgeschnitten und nur noch ein Link zum Anzeigen des Rests gezeigt.
Für die Umsetzung muss erstmal
JQuery eingebunden werden und auch am HTML wahrscheinlich ein paar kleine Änderungen gemacht werden. Ich hab mal als Beispiel folgendes HTML:
<div class="multiple">
<div class="post">
<h2>Beitragstitel 1</h2>
<div class="entrytext">
<p>Erster Absatz</p>
<ul>
<li>Listenpunkt 1</li>
<li>Listenpunkt 2</li>
</ul>
<p>Dritter Absatz</p>
<p>Vierter Absatz</p>
</div>
</div>
<div class="post">
<h2>Beitragstitel 2</h2>
<div class="entrytext">
<p>Erster Absatz</p>
<ul>
<li>Listenpunkt 1</li>
<li>Listenpunkt 2</li>
</ul>
</div>
</div>
</div>
Und jetzt noch das JavaScript (am besten in eine eigene Datei, eh klar):
$(document).ready(
function() {
// es muss jeder Beitrag separat verarbeitet werden
$('.multiple .entrytext').each(function(i) {
// hier kann man natürlich 3, 4 oder mehr anzeigen, unten ist dann aber auch
// eine Änderung nötig.
// Überlegenswert wäre ein each() zu verwenden um flexibler zu sein
if ($(this).children().length > 2) {
// als letztes Element im .entrytext wird der Link im aufgeklappten Zustand
// ganz unten dargestellt. Sieht einfach viel besser aus.
$(this).append('<div class="more"><a href="javascript:;">ganzen Beitrag anzeigen</a></div>');
// die ersten zwei Absätze werden weiter angezeigt.
$(this).children(":first").addClass('show');
$(this).children(":first").next().addClass('show');
// ebenso der Link zum aufklappen
$(this).children('.more').addClass('show');
// und alle anderen werden versteckt.
$(this).children().not(".show").hide();
} // fi
}); // each
// der eingefügte Link zum Aufklappen braucht noch Funktionalität
// es ist hier möglich mehrere Beiträge komplett anzuzeigen
$(".multiple .entrytext .more a").click(function() {
if ($(this).parent().is('.show')) {
$(this).parent().siblings().show("slow");
$(this).text('Beitrag wieder zuklappen');
} else {
$(this).parent().siblings().not('.show').hide("slow");
$(this).text('ganzen Beitrag anzeigen');
}
$(this).parent().toggleClass('show');
});
});
Eine Variante gibt es noch, und zwar nur einen einzelnen Beitrag auszuklappen während der zuletzt aufgeklappte wieder eingeklappt wird, einfach nur oben das
click() austauschen:
$(".multiple .entrytext .more a").click(function() {
// alle Beiträge müssen zugeklappt werden
$(".multiple .entrytext").each(function(i) {
if ($(this).children().length > 2) {
$(this).children().not(".show").hide("slow");
}
});
// dann auch noch den richtigen Text für den Ausklapp-Link
$(".multiple .entrytext .more a").text('ganzen Beitrag anzeigen');
// falls der Beitrag wieder zugeklappt wird müssen wird das auch wissen
$(this).toggleClass("extend");
// und tun dann entsprechend nichts
if ($(this).is('.extend')) {
$(this).parent().siblings().show("slow");
$(this).text('Beitrag wieder zuklappen');
}
});
Die zweite Variante läuft bei mir auf der Startseite unter „ältere Beiträge“ und der Vorschau-Link verschwindet ganz wenn man drauf klickt. Aus irgendwelchen Gründen will Firefox den Link als
block darstellen wenn er in einem
span verschachtelt ist und daher verwende ich dort nur den Link alleine. Den Quellcode kann man sich in der
green.js anschauen.
Bevor noch jemand frägt „warum?“: Ganz einfach, technorati zum Beispiel holt sich gern die Startseite eines Blogs anstatt die einzelnen Blogseiten und daher ist es im Allgemeinen von Vorteil möglichst viele Beiträge auf der Startseite zu haben und nicht nur einen wie's zum Beispiel Frank Helmschrott macht (gut, er bietet noch eine alternative dazu an). Es gibt sicher noch ein paar SEO-Gründe, aber das andere ist mir eigentlich wichtiger. Es gibt sogar Wordpress-Themes die den Beitrag nicht ganz anzeigen und damit schlecht für technorati sind.