einen langen Text in mehrer Seiten unterteilen

mrepox

Erfahrenes Mitglied
Hallo Leute.

Es geht um eine lange Reisebeschreibung die als ein Text in der mysql DB eingetragen ist.
Wenn ich den Text auslese und anzeige, ist er ellenlang. Wie kann man es realisieren, das man nur eine bestimmte Menge ausliest und anzeigt oder bis zu einer Markierung, so das man mehere Seiten erzeugt?
Also Seite 1 2 3 4 5 usw.

Oder muß man den Text von vornherein in mehrer Seiten einteilen und in die Db schreiben?


Wäre für Tipps sehr dankbar.

Gruß azoo
:-)
 
Im Prinzip ist das ja so etwas, wie wenn du eine Tabelle mit Mitgliedern hast, und jetzt eine Liste über mehrer Seiten ausgibst.
Wie macht man das? Man übergibt einfach ein GET Parameter das den Wert 1, 2, 3... hat.
In einer Variable sagst du, wie viele Mitglieder auf einer Seite ausgegeben werden. Häufig arbeitet man dabei mit dem LIMIT Befehl in SQL.

Was du machen musst ist, den Text in eine Variable laden, und dann mit Hilfe des Get Parameter und der Variable zurechtschneiden. Diese eine Variable sagt bei dir natürlich nicht aus, wie viele Mitglieder auf eine Seite kommen, sondern wie viel Text. Also z.B. die Anzahl der Zeichen.

cAm3eel.
 
hm, nicht ganz. ich habe keine Tabelle sondern einen Eintrag in einem Feld.
Dieser Eintrag ist ein sehr langer zusammenhängender Text. Diesen will ich nicht in einem Rutsch anzeigen lassen sondern in mehere Teile splitten unten soll dann als Link Seite 1 2 3 4 stehen z.b.

Gruß azoo
 
Ich hab dich schon richtig verstanden ;)
Hatte eh grad nichts besseres zu tun, schau mal hier: http://pln.ath.cx/img_public/codes/Untitled.php

Falls der Link nicht mehr geht, dass folgende Script stand in der Datei:
PHP:
$str = "hier einen seeeeeeeehr langen text einfügen....";


$signs_per_page = "500";
$signs = strlen($str);
if (!is_numeric($_GET['page'])){
	$page = '0';
}else{
	$page = $_GET['page'];
}
$pages = round($signs / $signs_per_page)-1;

$start = $page * $signs_per_page;
$length = $signs_per_page;

for ($i=0; $i<=$pages; $i++){
	echo "<a href='?page=".$i."'>Seite ".($i+1)."</a>&nbsp;&nbsp;";
}

echo "<hr /><h2>Seite ".($page+1)."</h2>".substr($str,$start,$length)."<hr />";

cAm3eel.
 
Zuletzt bearbeitet:
Der Link geht noch, nur klappt das ganze nur einmal. Also bei einem klick ändert sich der text. nur zurück gehts dann nicht mehr. ist das ok?

Danke erstmal für deine Bemühung!


EDIT: Hmm, jetzt gehts! Super danke! Werde das mal umsetzten.

Gruß azoo

//EDIT

Der Anfang von Seite 1 fehlt,hast nochmal eine PN
 
Zuletzt bearbeitet:
Brauche dringend nochmal Hilfe!

Ich habe weiterhin nun das Problem, das der Text mitten im Wort abgeschnitten wird.
Das geht natürlich garnicht.

Versucht habe ich das hier:

PHP:
$signs_per_page = "1500";
$signs = strlen($str);
if (!is_numeric($_GET['page'])){
    $page = '0';
}else{
    $page = $_GET['page'];
}
$pages = round($signs / $signs_per_page)-1;

$start = $page * $signs_per_page;
$length = $signs_per_page; 

for ($i=0; $i<=$pages; $i++){
    echo "<a href='tpage.php?tpage=".($tpage)."&page=".$i."'>Seite ".($i+1)."</a>&nbsp;&nbsp;"; 
}

//
$string = substr($str,$start,$length);
$leerzeichen  = " ";
$pos = strripos($string, $leerzeichen);

if ($pos === false) {
   echo "<br>das letzte Leerzeichen wurde nicht im String gefunden";
} else {
   echo "<br>das letzte Leerzeichen wurde an Stelle $pos gefunden";
   
}

echo "<hr /><p>Seite ".($page+1)."</p><p>".substr($str,$start,$pos)."</p>";

Das hat zur Folge, das in jedem Textteil das letzte Leerzeichen gesucht wird und bis dahin wird der Text ausgegeben.
Leider Fehlt der Rest dann auf der drauffolgenden Seite, das heißt die nächste Seite beginnt unter Umständen mit einem unvollständigen Wort.

Wer hat da eine bessere Idee zu ?

Gruß !
 
Hi!

Du könntest auch - wie Du im ersten Beitrag schriebst - im Text eine "Neue Seite"-Markierung setzen, so in etwa wie hier:
PHP:
$text    = "Hier der sehr lange Text. [BREAK] Und das hier steht auf Seite zwei [BREAK] ...die dritte Seite.";
    
$seiten = array();
$seiten = split('\[BREAK\]', $text);
    
$seite    = intval($_GET['seite']);
if ($seite < 1 || $seite > count($seiten))
    $seite    = 1;

echo $seiten[$seite-1];
...bitte seid's gnädig, bin absoluter PHP-Neuling... :rolleyes:

Liebe Grüße,
Mark.
 
Naja, es ist schon komfortabler wie Cam3eel es gemacht hat. Dann brauch man keine "Breaks" mit reinbringen.

Sonst noch jemand eine Idee?

:)
 
Hi,

ein versuche mal folgendes:
PHP:
substr($str,$start,$pos) . substr($str, $start + $pos, strpos($str, ' ', $start + $pos) - $start - $pos)
Mamphil
 
Zurück