Ya sea que uses dase de datos o archivos de texto, el proceso sera mas o menos lo mismo. Deberás propagar de alguna manera (la URL generalmente) dos variables: el numero de noticias que se veran por pagina, y la pagina que actualmente quieres ver.
Quedaria asi:
Código PHP:
$porpagina = $_GET['porpagina']; // se toma el valor de $porpagina de la URL
$pagina = $_GET['pagina']; // lo mismo para $pagina
if (!isset($porpagina)) { // si el valor es nulo, qiere devir que no se envio nada por la URL
$porpagina = 5; // y entonces se define el valor predeterminado
}
if (!isset($pagina)) { // aca pasa lo mismo
$pagina = 1;
}
/* esto es como vos lo tenias */
$datos = file('noticias.dat');
$datos = array_reverse($datos);
$total = count($datos); // Cuenta las lineas existentes.
/* ahora lo importante */
$datos = array_slice($datos, $pagina*$porpagina-$porpagina, $porpagina);
/* utilizas array_slice para tomar solo una porcion de la matriz*/
/* y esto es como vos lo tenias */
foreach($datos as $elementos) {
$elementos = trim($elementos);
$parte = explode("|", $elementos);
echo "<b>" . $parte[2] . "</b>" . "<BR>" . $parte[3] . "<BR>" ." Escrita por " . "<b>" . $parte[1] . "</b>" . " el " . "<b>" . $parte[0] . "</b>" . "<BR>"."<BR>";
}
/* ahora creas los links con las variables que se propagarán */
$link_siguiente = "<a href='?pagina=".($pagina+1)."&porpagina=$porpagina'>Siguiente</a>";
$link_anterior = "<a href='?pagina=".($pagina-1)."&porpagina=$porpagina'>Anterior</a>";
echo "$link_siguiente<br>$link_anterior<br>";
echo "Noticias en total: " . $total;
Lo mas importante aqui es el uso de array_slice(), asi que te convendria revisar su documentacion:
http://www.php.net/array_slice
Ahora tienes algo mas o menos armado coma para adaptar.
Saludos y suerte!