Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] podział dłuższego tekstu na strony
Forum PHP.pl > Forum > Przedszkole
Lejto
Mam tekst który pobieram z bazy. Jest od długi jak zrobić aby podzielić go na strony biorąc pod uwagę przedział ile ma się wyświetlać ja 1 stronie?
amii
Zapewne chodzi ci o stronicowanie -> http://forum.php.pl/index.php?showtopic=35498
Lejto
nie chodzi mi o całą dużą klasę smile.gif, tylko o 1 funkcje która będzie dzieliła tekst i wyświetlała zależnie od strony
emtiej
Ja bym to zrobił tak:

1. Obliczenie ilości znaków za pomocą strlen;
2. Obliczenie ilości stron dzieląc ilość znaków w ciągu na ilość znaków na stronie
3. Wyświetlenie części ciągu za pomocą substr

Jak dokładnie to napiszesz to już twoja sprawa, ja proponuję zrobić prostą funkcję z dwoma parametrami, mianowicie stroną i id artykułu, który ma być wyświetlany, deklarujesz w niej stałą z ilością znaków na stronie i wyświetlasz tak:

  1. $ciag = strlen($string)
  2. $od = $strona*ILOSC_ZNAKOW_NA_STRONIE;
  3. if(($od+ILOSC_ZNAKOW_NA_STRONIE) > $ciag)
  4. {
  5. $do=($od+ILOSC_ZNAKOW_NA_STRONIE)-$ciag;
  6. }else{
  7. $od=$do+ILOSC_ZNAKOW_NA_STRONIE;
  8. }
  9.  
  10. $tresc_strony = substr($ciag, $od, $do);


Stony muszą być liczone od 0, dodaj kilka instrukcji warunkowych sprawdzających, czy taka strona istnieje, jeżeli nie istnieje to zwróć błąd, resztę zostawiam dla Ciebie, bo żeby się nauczyć trzeba pomyśleć smile.gif Powodzenia
Lejto
dzięki, podobnie myślałem
ale nie chce wyświetlać tekstu pod zmienną $tresc_strony; dostaje bool(false)


ok, mam zmieniłem dane
  1. $strona = 1;
  2. $ciag = strlen($b->tresc);
  3. $od = $strona*300;
  4. if(($od+300) > $ciag)
  5. {
  6. $do = ($od+300)-$ciag;
  7. }else{
  8. $od = $do+300;
  9. }
  10. $tresc_strony = substr($b->tresc, $od, $do);
  11. var_dump($tresc_strony);
  12.  

ale nie działa prawidłowo jeszcze mianowicie nie wyświetla tekstu jeżeli strona jest = 1 tylko dopiero od 3

wywaliłem if
  1. $strona = 0;
  2. $ciag = strlen($b->tresc);
  3. $od = $strona*300;
  4. $do = ($od+300)-$ciag;
  5.  
  6. $tresc_strony = substr($b->tresc, $od, $do);

działa jako powinno, jeszcze tylko wyświetlanie linków do stron
celbarowicz
funkcja->najpierw trzeba ustalić ilość znaków we wierszu,np 100, jeżli w ten sposób trafisz w środek wyrazu to należy cofnąć się do pierwszej spacji od końca, (funkcja) pobierasz ten wiersz, trzeba również tak jak już ustalono określić ilość wierszy na stronę.....itd itp.

http://php.net/manual/pl/function.wordwrap.php
Lejto
i tu mam problem, nie wiem jak przenieść ten wyraz i jeszcze na ostatniej stronie ucina tekst z powodu zmiennej $do
  1. $strona = 1;
  2. $ciag = strlen($b->tresc);
  3. $od = $strona*300;
  4. $do = ($od + 300) - $ciag;
  5.  
  6. $str = $ciag / 300;
  7. $a = $ciag / 300;
  8. $page_news2 = explode(".", $str);
  9. $page_news1 = ($a!=0)? $page_news2[0] + 1 : $str;
  10.  
  11.  
  12. $tr = substr($b->tresc, $od, $do);
  13. $tresc_strony = wordwrap($tr, 200, "\n");
  14.  
  15. for($i=0; $i < $page_news1; $i++)
  16. {
  17. $b = $i;
  18. if($b!=0)
  19. {
  20. echo $b;
  21. echo '<br>';
  22. }
  23. }


z ostatnią stroną sobie poradziłem, jak ma wyglądać funkcja która przenosi wyraz?

//
źle coś tu jest przy stronicowaniu jeszcze bo kawałek 2 strony urywa z początku

mam działającą funkcje stronicowania w końcu
  1. if($_GET['page_blog'] == 1 or $_GET['page_blog'] == NULL)
  2. {
  3. $strona = 0;
  4. }
  5. else
  6. {
  7. $strona = $_GET['page_blog'];
  8. }
  9. var_dump($_GET['page_blog']);
  10. echo $strona;
  11. $ciag = strlen($b->tresc);
  12. echo '<br>';
  13. echo $ciag;
  14. echo '<br>';
  15.  
  16. $od = $strona*300/2;
  17.  
  18. if($strona == 0)
  19. {
  20. $do = 300;
  21. }
  22. else
  23. {
  24. $do = ($od + 300) - $ciag;
  25. echo $do;
  26. }
  27. $str = $ciag / 300;
  28. $a = $ciag / 300;
  29. $page_news2 = explode(".", $str);
  30. $page_news1 = ($a!=1)? $page_news2[0] + 1 : $str;
  31.  
  32.  
  33.  
  34. $tresc_strony = substr($b->tresc, $od, $do);
  35.  
  36. for($i=0; $i < $page_news1; $i++)
  37. {
  38. $b = $i+1;
  39. if($b!=0)
  40. {
  41. if(isset($_GET['page_news']) && $b==$_GET['page_news'])
  42. {
  43. echo "<b><a href=pokaz,".$id.",".$b.">".$b."</a></b>"; if($b!=$page_news1){ echo", "; }
  44. }
  45. elseif(!isset($_GET['page_news']) && $b==1)
  46. {
  47. echo "<b><a href=pokaz,".$id.",".$b.">".$b."</a></b>"; if($b!=$page_news1){ echo", "; }
  48. }
  49. else
  50. {
  51. echo "<b><a href=pokaz,".$id.",".$b.">".$b."</a></b>";
  52.  
  53. } }
  54. }

problem jest jeszcze przy tym dzieleniu wyrazów, żeby przeniosło go na 2 stronę

nadal nie mogę sobie poradzić
chciałem podzielić tekst na wyrazy i wyświetlać tylko określoną ilość ale nic z tego (nie wiem jak wyświetlić)
chciałem też pobrać ostatni wyraz zliczyć go i dodać wartość do zmiennej $do; lecz nie wiem jak pobrać ostatni wyraz ;/


no chłopaki ;P
nie robiliście nigdy czegoś takiego i nie mieliście problemu z przeniesieniem wyrazu?
Pilsener
To użytkownik powinien decydować ile ma być stron i co ma być na każdej, dzielenie dynamiczne obciąży serwer i zawsze będzie niedokłane, bo:
- strony będą nierówne - nawet jak policzysz wyrazy to strona może zawierać np. listę czy obrazek
- co z urywaniem tekstu w połowie zdania? Możesz wykrywać koniec zdania po . ale co jak trafisz np. na skrót?
- co wtedy, jeśli tekst jest podzielony na sekcje i ma np. nagłówki?
- co wtedy, gdy podział wypadnie wewnątrz tagów html lub bbcode?
- co wtedy, jeśli tekst zawiera nie tylko tekst, lecz np. film, obrazki, tabele, może nawet skrypt JS?
- co z edycją tego? Tu dopiero się robią schody

Moim zdaniem to nie ma sensu, podziel to ręcznie albo wyświetlaj całość.
Lejto
nie mogę wyświetlać całości bo szablon nie jest tak długi.
jak mam to ręcznie podzielić?
lukaszgolder
np dodając w momencie w momencie końca strony <!-- pagebreak --> i potem za pomocą explode dzielić tekst na strony.
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.