Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Stronicowanie plików html.
Forum PHP.pl > Forum > PHP
trylas
Sprawa jest nastepujaca... mam spora ilosc artykulow w postaci plikow html.... dodatkowo sa one dlugie i zawieraja obrazki....

Moje pytanie brzmi : czy lepiej wrzucic te artykuly do bazy i wyciagac je z bazy i dzielic na strony?

czy lepiej otwierac dany plik i wyciagac okreslona ilosc linii i w ten sposob stronicowac? ....
tyle ze ponizszy kod nie gwarantuje tej samej ilosci linii ... sprawdzilem i roznie to wyglada moze to sprawa grafiki ktora liczona jest inaczej?

oto kod:
CODE

$uchwyt = fopen($id,'r');
while(!feof($uchwyt)){
$linia = rtrim(fgets($uchwyt));
$licznik++;
if($licznik>0 && $licznik<=15){
$tabliczka[] = $linia;
print $linia;
}
}
fclose($uchwyt);


druga sprawa jak zrobic stronicowanie w zaistnialej sytuacji?

skonstrowałem taki kod
  1. <?php
  2. $id = isset( $_GET['id'] ) ? $_GET['id'] : 0;
  3. $nazwa = $id;
  4. $id = 'calinews/'.$id.'.php';
  5.  
  6.  
  7. $uchwyt = @fopen ("$id", "r");
  8. if ($uchwyt) {
  9. while (!feof($uchwyt)) {
  10.     $buffer = fgets($uchwyt);
  11.  $array = split('<p></p>', $buffer);
  12.  
  13. $nr_stron = array_keys($array);
  14. for ($x=0; $x<count($nr_stron); $x++)
  15. {
  16. print "<a href=artykul.php?id=$nazwa&start=$nr_stron[$x]>$nr_stron[$x]</a>";
  17. }
  18. print '<br>';
  19. $start = 0;
  20. $start = isset( $_GET['start'] ) ? $_GET['start'] : 0;
  21. print $array[$start];
  22. }
  23. fclose ($uchwyt);
  24. }
  25. ?>

i wszystko dziala dopoki dzielony plik nie jest html bo wtedy split dzieli kazdy nawias..... czy ktos ma pomysl na rozwiazanie tego problemu.
Pilsener
A nie możesz tego podzielić w ten sposób, że jeden plik = jedna strona? Będzie łatwiej i szybciej - inaczej nigdy nie będzie równo - no i po linijkach czy słowach jest bez sensu, bo co, gdy utnie w połowie zdania? Lepiej już po akapitach - trzeba policzyć akapity oraz znaki/słowa/linijki (najszybciej będzie chyba linijki) - wyświetlać np. nie więcej niż 1500 znaków na stronę zaokrąglając do najbliższego akapitu.
trylas
prosze o pomoc.
Foxx
Może wstaw do treści artykułów znacznik w stylu #PART# i rób split na nim.
trylas
ano faktycznie good idea ... ale jeszcze problem ze spacjami tez widzi je i umieszcza ... zna ktos jakis hokus pokus na to?
Foxx
Kto widzi?
Gdzie umieszcza?
worriedsmiley.gif
trylas
tzn ... musze wyrzucic wszystkie spacje z dokumentu html (nawet te ktore formatuja kod dla lepszej czytelności) bo inaczej wyswietla mi je jako ... link (indeks z tablicy) .... moze to byc blad w kodzie bo pisalem to sam ... a doswiadczenie mam srednie wiec moglem cos zapetlic..... z drugiej strony testowalem to na pieciu indexach tablicy(slowach) i funkcjonowalo ...... nie wiem czy jasno sie wyrazilem
Foxx
Niezupełnie jasno. Pokaż przykład nieporządanych objawów i wklej kod, który jest za nie odpowiedzialny. Wtedy będziemy mogli pomóc lepiej.
trylas
CODE
$id = isset( $_GET['id'] ) ? $_GET['id'] : 0;
$nazwa = $id;
$id = 'calinews/'.$id.'.html';


$uchwyt = @fopen ("$id", "r");
if ($uchwyt) {
while (!feof($uchwyt)) {
$buffer = fgets($uchwyt);
$array = split('#PART#', $buffer);

$elems = count($array);
$na_stronie = "1" ;

$start = $_GET['start'] ;
if( !isset($start) ) { $start = "0"; }

$ta_strona = $start / $na_stronie + 1 ;

$start_podstrony = "0";
$podstrona = "1";

print '<table width="100%" border="0" cellspacing="0" cellpadding="0" class="tresc">';
print '<tr>';
print '<td>';
print $array[$start];
print '<br><br>';

print '<table width="100%" border="0" cellspacing="0" cellpadding="0">';
print '<tr>';
print '<td align="center">';

if( $start > 0 ) {
$start_poprzedniej = $start - 1;
print '<a href="artykul.php?id='.$nazwa.'&start=' . $start_poprzedniej . '"><< Poprzednia</a>' ;
}
while ( $start_podstrony < $elems ) {
if( $podstrona == $ta_strona ) {
print' [ <a href="artykul.php?id='.$nazwa.'&start='.$start_podstrony.'"><b>' . $podstrona . '</b></a> ] ' ;
} else {
print ' [ <a href="artykul.php?id='.$nazwa.'&start=' . $start_podstrony . '">' . $podstrona . '</a> ] ' ;
}
$start_podstrony = $start_podstrony + $na_stronie ;
++$podstrona;
}
if( $start < $elems-1) {
$start_nastepnej = $start + 1;
print '<a href="artykul.php?id='.$nazwa.'&start=' . $start_nastepnej . '">Następna>></a>' ;
print '</td></tr></table>';

OKS wszystko funkcjonuje i oparte jest na skrypcie Jessie Jamesa http://www.jessie.ovh.org/test/stronicowanie.php

jest tylko jeden minus tego .... zaciagany plik html i dzielony nie moze zawierac białych znaków bo wtedy ... te białe znaki zapisywane sa do tablicy po indeksem "0" .... nie mam pojecia jak to rozwiazac.... tak wiec poki co wszystkie zaciagane pliki przerobilem jako kod html bez spacji(bialych znakow). moze ktos wie jak to rozwiazac, zeby bylo normalnie i mozna bylo sformatowac kod dla wiekszej czytelnosci....
Apocalyptiq
Nie rozumiem, jakie białe znaki? Graniczne białe znaki (na końcu/początku) możesz usunąć funkcją trim(), ale chyba nie o to ci chodzi. Mógłbyś podać linka, żeby można było zobaczyć jak to aktualnie działa i co nie działa ok? Albo ew. tu na forum treść strony, na której jest błąd z tymi spacjami.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.