Homepage selbermachen 7.852 Themen, 35.619 Beiträge

Möglichkeit, Text in verschiedene Mengen aufzuteilen

Gonzales / 10 Antworten / Baumansicht Nickles

Hallo,

ich habe mich mit PHP und Mysql beschäftigt und gleichzeitig eine Frage.

Ich habe eine Webseite, deren layout unbedingt darauf ausgelegt ist, dass sie nicht durch Scrollen zerhauen wird. somit brauche ich eine Möglichkeit, um langen Text auf mehrere Seiten aufzusplitten mittels einem {weiter} oder |1|2|3... Button. Der Text kommt aus einer MySQL Tabelle. Ich hatte mir das jetzt "trocken" mal so gedacht, dass ich den Text nach Sätzen auftrenne mit der Funktion explode. Ich will nicht, dass ich nach substr() oder so etwas aufteile, da ich sonst Gefahr laufe, und mitten im Wort unterbreche.

Also zu meiner idee:

ich habe den Text in der Variable $text vorhanden.

$text_exploded = explode(".",$text); //Die Sätze werden aufgetrennt

$text_counted = count ($text_exploded); // Zählen der Sätze

for($a=0;$a {
Hilfe und hier weiss ich nciht weitery

}


Wer kann mir jetzt einen Tipp geben wie ich weiterkomme ich hänge

bei Antwort benachrichtigen
Heinz_Malcher Gonzales „Möglichkeit, Text in verschiedene Mengen aufzuteilen“
Optionen

Da die Frage noch unbeantwortet ist, versuche ich es einmal...leider aber kann ich keinen Tipp geben, da ich mich erinnere, dass wir die Frage schonmal auf nickles hatten - ich glaube nicht, dass das wirklich geht. Ich kenne das nur so, dass man mehrere Seiten bereits vorher einplant und entsprechend den Text per Hand einteilt.

Wenn ich am Wochenende dazu komme, dann werde ich das mal durchtesten

bei Antwort benachrichtigen
jdeen Gonzales „Möglichkeit, Text in verschiedene Mengen aufzuteilen“
Optionen

Hallo Gonzales !

Damit Deine Seiten beim Scrollen nicht zerhauen werden,
kannst Du Frames verwenden.
Dies hat aber Nachteile für Suchmaschinen.

Für Deine Anwendung müssen die Sätze wieder aneinander gereiht werden.
Und zwar nur eine bestimmte Anzahl z.B: 20. Diese Zahl gehört in eine Variable z.B. $anzahl

Als Erstes berechnest Du die benötigten Seiten :

$seiten = $text_counted / $anzahl (als Ganzzahl + 1)

$neutext = ''

for($a=($seite-1)*$anzahl;$a
{$neutext = $neutext&$text_exploded[$a]}

Achtung : Ob diese Zeile syntaktisch OK ist, weiß ich nicht.
Von der Logik her müßte es klappen.

Nun muß Dein Programm nur noch wissen, welche Seite angezeigt werden soll (mittels Info aus der Seitenauswahl [1][2][3] ...) .

Die Seitenauswahl kann auch dynamisch über $seiten aufgebaut werden.
z.B. auch : aktuelle Seite rot darstellen etc.

Gruß jdeen

. . . when the kid next door walking on the moon . . .Wirklich gute Jdeen passen auf einen Bierdeckel
bei Antwort benachrichtigen
Borlander jdeen „Möglichkeit, Text in verschiedene Mengen aufzuteilen“
Optionen
Und zwar nur eine bestimmte Anzahl z.B: 20
Die Satzanzahl zu verwenden halte ich für ein denkbar ungüstiges Verfahren, denn Sätze haben die dumme Angewohnheit sehr unterschiedlich in ihrer Länge beschaffen zu sein. Wesentlich besser ist da schon eine feste Zeichenanzahl (es werden gerade soviele Sätze verkettet daß die maximale Zeichenanzahl gerade nicht überschritten wird). Allerdings hat man auch hier noch das Problem der langen und kurzen Wörter (hat ein Text viele lange Wörter dann braucht er bei gleicher Zeichenanzahl meist mehr Zeilen). Man müsste das Problem also optimalerweise Zeilenweise abarbeiten (maximale Zeilenanzahl) - dies ist jedoch nur Bedingt möglich da die Textdarstellung je nach Browser leicht und bei veränderter Schriftgröße sogar sehr stark abweichen kann...

CU Borlander
bei Antwort benachrichtigen
Borlander Gonzales „Möglichkeit, Text in verschiedene Mengen aufzuteilen“
Optionen
Ich habe eine Webseite, deren layout unbedingt darauf ausgelegt ist, dass sie nicht durch Scrollen zerhauen wird.
Das ist schonmal ungünstig...

Ich hatte mir das jetzt "trocken" mal so gedacht, dass ich den Text nach Sätzen auftrenne mit der Funktion explode
Problem 1: Nicht alle Sätze mit enden mit einem "."
Problem 2: Ein Punkt stellt nicht zwangsläufig das Satzende dar (z.B. in Aufzählungen, Versionsnummern "1.2.3" oder auch in "z.B.")

Unabhängig davon tritt auch noch Problem 3 auf:
Wenn der Text automatisch "zerpflückt" wird nimmt die Übersichtlichkeit ab - die Seitenumbrüche werden dabei zwangsweise auch Thematisch zusammenhängende Sätze oder Stichpunkte auseinanderreißen. Falls die Inhalte HTML-Formatiert sind fehlen mit an Sicherheit grenzender Wahrscheinlichkeit anschließend schließende Tags...

Optimalerweise solltest Du die Texte also selbt trennen - z.B. mit
<br class="newpage"> (bei zusammenhängerder Darstellung als Zeilenumbruch, könnte man auch mit <hr> machen, newpage dient hier einfach nur zur Unterscheidung anderer evtl. vorhandener Zeilenumbrüche - bei zusammenhängender Darstellung lässt sich das auch zu Formatierungszwecken nutzen) oder
<!pagebrake> (würde als Kommentar einfach nur ignoriert)
Eben das was Dir am besten gefällt...

Große Vorteile dieser Methode:

  • Sinnvolle Trennung
  • einfaches und zuverlässiges Teilen
    $pages = explode($trenner, $text);
  • einfaches Ermitteln der Seitenanzahl zur Navigation
    mit count die Arraygröße ermitteln
    $page_count = count($pages);
    // for($page_nav = 1; $page_nav
  • einfache Ausgabe der Seiten
    echo $pages[$page];


Einziger Nachteil:
- minimal größerer Aufwand bei der Eingabe


CU Borlander
bei Antwort benachrichtigen
Heinz_Malcher Borlander „Möglichkeit, Text in verschiedene Mengen aufzuteilen“
Optionen

stimmt, ich hatte mir das ähnlich gedacht. im Text einfach Zeichen einbauen, die so sicher nicht vorkommen (ich hatte z.b. an ##### gedacht, aber dein Vorschlag ist bessser!). Dann kann man das ganz normal und manuell machen.

Grosser Vorteil: Man braucht trotzdem nur eine eingeplante text Spalte in der DB. Also ich denke, das ist das sinnvollste, da man mit Punkten nicht wirklich sinnvoll trennen kann.

bei Antwort benachrichtigen
Wetterfrosch2 Gonzales „Möglichkeit, Text in verschiedene Mengen aufzuteilen“
Optionen

Frames: WEnn ich das mit Frames lösen möchte, empfehlt ihr mir da den IFrame? Wie kann ich verhindern, dass Frames ohne den Rest der Seite einzeln erfasst oder geladenwerden? Ich habe das mal gesehen, dass man mit PHP da was machen kann oder?

bei Antwort benachrichtigen
jdeen Wetterfrosch2 „Frames?“
Optionen

Hallo Wetterfrosch !
Wenn Sites als Frames aufgebaut sind, werden meist 3 Frames verwendet:
Ein Top-Frame, ein Menü-Frame (links oder rechts) und ein Ausgabe-Frame (content). Um die Seiten hier auszugeben, wird bei den links als Ausgabe-Ziel "content" angegeben : target="content"

. . . when the kid next door walking on the moon . . .Wirklich gute Jdeen passen auf einen Bierdeckel
bei Antwort benachrichtigen
jdeen Gonzales „Möglichkeit, Text in verschiedene Mengen aufzuteilen“
Optionen

Hallo Borlander !

Die Satzanzahl zu verwenden ist sicher nicht die ideale Methode.
Deine Einwände , auch zu den Abkürzungen etc. gehen voll in Ordnung.

Ich habe nur auf der Vorgabe von gonzales aufgebaut.

Der Beste Weg ist immer die händische Aufteilung auf die einzelnen Seiten.
Besonders, da dann Themen nicht zerrissen werden.

Gruß jdeen

. . . when the kid next door walking on the moon . . .Wirklich gute Jdeen passen auf einen Bierdeckel
bei Antwort benachrichtigen
Borlander jdeen „Hallo Borlander ! Die Satzanzahl zu verwenden ist sicher nicht die ideale...“
Optionen
Ich habe nur auf der Vorgabe von gonzales aufgebaut.
Also ich kann aus dem Text nicht rauslesen das eine feste Zahl von Sätzen verwendet werden soll...

Die Obergrenze sollte zumindest durch die Zeichenanzahl begrenzt werden - das ist auch nicht aufwendiger:

$i = 0; $text = '';
while(($i {
  $text .= $saetze[i]
}


CU Borlander
bei Antwort benachrichtigen
jdeen Borlander „ Also ich kann aus dem Text nicht rauslesen das eine feste Zahl von Sätzen...“
Optionen


Das hast Du jetzt falsch verstanden :

Gonzales hatte den Text mit explode in Sätze zerteilt.
Und zum Anzeigen muß man sie nun wieder zu Text-Blöcken zusammenfügen.
Also die Sätze aneinander reihen.
Ob das sinnvoll ist, steht auf einem anderen Blatt.

Wieviel ? Das hängt natürlich von der Länge der Sätze ab. Und das ist ungewiss.
Da ist Deine Version mit "Anzahl_Zeichen" ($maxlen) sinvoller.

Gruß jdeen

. . . when the kid next door walking on the moon . . .Wirklich gute Jdeen passen auf einen Bierdeckel
bei Antwort benachrichtigen