blätterfunktion .txt

melistik

Erfahrenes Mitglied
Könnte mir bitte einer eine Blätterfunktion erklären die nicht auf MYSQL basierd.
Ich verstehe auch oftmals die Funktionen in den Blätterscripten,
jedoch würde ich zum ersten wissen wie man eine schreibt (txt basiend auslesen)
und zum anderen wie man es genau ausgibt, da das auch bei vielen
MSQL basierenden fehlt. Ich kann mir nicht vorstellen, das die ausgabe
einfach stopp macht wenn man die show.php=view1 oder so ähnlich.
Die kann doch nicht wissen, das sie in der ersten anzeige bis 5 gehen soll und
dann erst bei der zweiten seite von 6-10 und so weiter.
Also zusammenfassend möchte ich eine Blätterfunktion erklärt "haben",
und die dazugehörige Ausgabe.
mfg melistik
 
Hi,
das dein Script nicht einfach so wissen kann welche zeilen es ausgeben soll ist
logisch, deshalb musst du ihm das einfach sagen, hier ist mal meine Funktion
die das ganze macht:
PHP:
function seiten(){
		global $BEITRAEGE_PRO_SEITE, $TABELLE_NAME, $start;
/*		$result = mysql_query("SELECT nr FROM $TABELLE_NAME");
 		$beitraege = mysql_num_rows($result);
		mysql_free_result($result); */
        $beitraege=count(file(textdatei.txt));  // gesammte anzahl der Datenseätze ermitteln
        $seiten = "<font face=\"Arial\" size=\"2\"><center>";
  if ($start - $BEITRAEGE_PRO_SEITE > 0){
      $startdavor = $start - $BEITRAEGE_PRO_SEITE ;
      $seiten = $seiten."<a href=\"index.php?start=$startdavor\"><<</a> ";
  }
  $startdanach = $start + $BEITRAEGE_PRO_SEITE;
  $i=0;$e=1;
   do {
       $seiten = $seiten."<a href=\"index.php?start=$i\">$e</a> ";
       $i= $i + $BEITRAEGE_PRO_SEITE;
       $e++;
      }
   while($i < $beitraege);
if ($startdanach < $beitraege){
     $seiten= $seiten."<a href=\"index.php?start=$startdanach\">>></a></font>";
  }
  return $seiten;
}
echo seiten();

Dann hast du nach dem klick auf einen der Links in der Variable $start den
Startwert stehen von wo aus du beginnst die Zeilen der Datei auszugeben.
Dies bekommst du am besten mit Hilfe der Arrayfunktionen hin.

gruß tob
 
Ich kann mir nicht vorstellen, das die ausgabe
einfach stopp macht wenn man die show.php=view1 oder so ähnlich.
Die kann doch nicht wissen, das sie in der ersten anzeige bis 5 gehen soll und
dann erst bei der zweiten seite von 6-10 und so weiter.
Aber genau so ist es. Als Progammierer legt man fest wieviel Einträge
pro Seite Angezeigt werden soll.

Wenn du als Programmierer festlegst das 5 Einträge angezeigt werden
sollen so ergibt sich Automatisch das wenn Seite 4 Angezeigt werden soll
das $anzahldereinträge * $seitennummer den Anfang deiner Ausgabe
und das ende ist dann ja logischerweise $anzahldereinträge grösser

Also reicht dem Script als Übergabewert die Seitenummer die angezeigt werden soll

PHP:
$zeilen = 5 #festlegen der der Anzahl der Einträge pro Seite
$daten = file("textdatei.txt"); #einlesen der daten
#$seitenr wird übergeben
$start = $zeilen * $seitennr - $zeilen; # seite 1 * 5 - 5 = 0 z.b.
for ($lo=start;$lo<($start+$zeilen);$lo++) { 
 echo $daten[$lo]."<br>";
}

das ist das Grundgerüst
 
Es kann auch sein das ich mich nun total irre =)
$start ist am Anfang 0 ? nach wird es immer bei Aufruf von Hyperlink erhöht um 1.
Wird durch den Aufruf des Links der Script komplett neu geladen ?, nur mit geänderter $start Variabe ? Ich habe es so interpretiert und mir mal was geschrieben ohne es getestet zu haben.
Ich verstehe die funktion des hyperlinks noch nicht so ganz und kann deshalb auch komplett
falsch liegen :)

PHP:
global $BEITRAEGE_PRO_SEITE, $start;
$lines = file("edit.txt");
$a = count($lines);
$post_per_page = 5
$post_per_page == $BEITRAEGE_PRO_SEITE

$u = $a - ($post_per_page-1);
for ($i = ($a-($post_per_page * $start)); $i >= (($a-($post_per_page * $start))-($post_per_page-1)) ;$i--)
{ 
    $zeile = $lines[$i-1];
    list($user,$topic,$text,$datum,$icon,$link,$na2) = explode ("|--|", $zeile);
    echo ".....";
}


function seiten(){
        global $BEITRAEGE_PRO_SEITE, $start;
        $beitraege=count(file(textdatei.txt));  // gesammte anzahl der Datenseätze ermitteln
        $seiten = "<font face=\"Arial\" size=\"2\"><center>";
  if ($start - $BEITRAEGE_PRO_SEITE > 0){
      $startdavor = $start - $BEITRAEGE_PRO_SEITE ;
      $seiten = $seiten."<a href=\"index.php?start=$startdavor\"><<</a> ";
  }
  $startdanach = $start + $BEITRAEGE_PRO_SEITE;
  $i=0;$e=1;
   do {
       $seiten = $seiten."<a href=\"index.php?start=$i\">$e</a> ";
       $i= $i + $BEITRAEGE_PRO_SEITE;
       $e++;
      }
   while($i < $beitraege);
if ($startdanach < $beitraege){
     $seiten= $seiten."<a href=\"index.php?start=$startdanach\">>></a></font>";
  }
  return $seiten;
}
echo seiten();
Wir nehmen an ich habe 20 Einträge
wenn start am Anfnag 0 ist kommt für $i = 20
Die schleife wird 5 mal durchgeführt, da ((20-(5 * 0))-(5-1)) = 16 sind
Zeile 20,19,18,17 und 16 werden ausgeben. Wenn nun durch link $start 1 wird,
wird von Zeile 15 -11 Ausgegeben und so weiter.
Durch $i-- wird rückwerts Ausgeben und somit ist der neuste post ganz am Anfang.
Is everythink all right ? I dont think so :(
 
Blätterfunktion einschränken ...

Inhalts dieses Posts habe ich gelöscht ... siehe Beitrag von mir weiter unten (der Übersicht halber) ...

Originalfrage gekürzt:

An welche stelle muss ich da was ändern, dass wie gesagt nur maximal 10 seitenzahlen angezeigt werden...
 
Zuletzt bearbeitet:
Dein Beitrag passt hier nicht so wirklich rein ! :)
Hier wollen wir Blätterfunktion auf Text basis besprechen und nicht mysql.
MYSQL findest du sehr oft im Board !
Nun ja ich denke bei dir müsstest du die for Funktion ändern :
for ($i=1; $i<=intval($total/$max)+1; $i++)
ändern zu ->
$entries = 27 // deine maximale anzeige (so werden 30 angeziegt)
for ($i=1; ($eintries/$max)>= $i ; $i++)
{ echo "<a href=\"$PHP_SELF?page=$i\">$i</a>";}

Nun kann mir einer bitte bei meinem Script helfen ;)
 
Zuletzt bearbeitet:
@ melistik

Original geschrieben von melistik
Dein Beitrag passt hier nicht so wirklich rein ! :)
Hier wollen wir Blätterfunktion auf Text basis besprechen und nicht mysql.
doch :-)

Das Prinzip bleibt ja das gleiche du musst wissen von welcher Zeile an das Textfile ausgeben wird:
angenommen start=7 und du möchtest 11 beiträge ausgeben:
PHP:
$daten = file("textdatei.txt");
for ($i =$start; $i >= $start + 11; $i++){
     echo $daten[$i];
}

tob

P.s. leute schreibt mal noch dazu wen ihr mit euren Antworten meint, die Sache mit den 2 thread in einem wir sonst etwas kompliziert.... ;)
 
Zuletzt bearbeitet:
@Tob
Ich habe etwas geschrieben =) gestüzt auf McDonald
PHP:
<?php
$lines = file("edit.txt");
$total = count($lines);
$max = "3";

if (0 >= intval($total/$max)) {
    $page = 1;
}

elseif ( intval($total/$max) > $page) {
      $page++;
}


for ($i = ($total - ($max*($page-1))); $i >= ($total - (($max*$page)-1)) ;$i--)
{ 
    $zeile = $lines[$i-1];
    list($user,$topic,$text,$datum,$icon,$link,$na2) = explode ("|--|", $zeile);
    echo $user;
    echo  "--";
    echo $topic;
    echo "<br><br>";
}


for ($i=0; intval (($total-1)/$max)>= $i ; $i++)  {
        echo "<a href=\"$PHP_SELF?page=$i\">$i</a>";
        echo "&nbsp;";

}
?>
Das einzige Problem ist nur das die letzte Page nicht das angezeigt wird was soll.
Es wird nur der selbe Inhalt wie bei dem Link davor. da ansehen
Ausserdem müsste ich bei derletzten Seite noch eine funktion einbauen, die abbricht, wenn wir beim Ende der Text sind und nicht einfach müll ausließt.
In diesem Fall wäre nur eine Ausgabe von: --
Brauche hilfe
 
Hi melistik,
wenn du den link von hand so änderst:
http://web524.server18.greatnet.de/pages/php/blaetternfunk.php?page=4
dann wird auch die letzte Seite angezeigt. So auf die Schnelle sehe ich jetzt nicht woran das liegen könnte, vieleicht hast du irgendwo einen Denkfehler in deinen Berechnungen.
Dass Problem mit der Ausgabe von Werten die es nicht in der Datei gibt kanns du einfach so lösen;
PHP:
for ($i = ($total - ($max*($page-1))); $i >= ($total - (($max*$page)-1)) ;$i--){ 
    if ($lines[$i-1] == ""){
        $zeile = $lines[$i-1];
        list($user,$topic,$text,$datum,$icon,$link,$na2) = explode ("|--|", $zeile);
        echo $user;
        echo  "--";
        echo $topic;
        echo "<br><br>";
    }
}

tob
 
OWEIA ...

... da hab ich ja was angerichtet mit dem Doppelthread ...

und leider sehe ich jetzt nicht mehr durch, ob und wie ich wo was ändern muss, um mein Problem zu lösen ...

Ich möchte auch nicht melistik in die Quere kommen, da er ja genauso auf seine Problemlösung hofft ...
Soll ich meinen Thread in ein neues Thema posten?

Bitte Antwort[

ich könnte auch die ganzen vorhandenen Files der shoutbox mal zippen und an den schicken, der sich damit auskennt ;-)
 
Zurück