Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dzielenie długiego textu na strony
Forum PHP.pl > Forum > PHP
miki_ok
Mam texty które ladowane są z bazy.
Problem w tym że te texty są strasznie długie i rozjeżdżają mi moją ciasną stronkę.
Czy jest jakaś możliwość aby dzielił ten długi text na pare stron.
Nie mam powysłu jak to zrobić.


Z góry dziekuję za pomoc.
Pozdrawiam
thornag
  1. <?php
  2. function cutString($string, $lenght) {
  3. if(strlen($string) <= $lenght) {
  4. return $string;
  5. }
  6. else {
  7. for ($i = $lenght; ; $i++) {
  8. if ($string{$i} == " " or $string{$i} == "!" or $string{$i} == "," or $string{$i} == ":" or $string{$i} == ";"or $string{$i} == "?") {
  9. $string = substr($string, 0, $i);
  10. return $string;
  11. break;
  12. } 
  13. }
  14. }
  15. }
  16. ?>


Z palca na syzbko ale powinno dzialac.
miki_ok
Nie wiem może ja jakiś nie do końca jestem ale mi to nie działa. sad.gif
thornag
Sposob uzycia


  1. <?php
  2. echo cutString($tekst, $ile_znakow_chcesz);
  3. ?>


Testowalem wszystko jest w porzadku.
miki_ok
Na początek poprosze o nie denerwowanie się. biggrin.gif

Mam takie cuś.
  1. <?php
  2.  
  3. if($wiersz=mysql_fetch_array ($wykonaj)) {
  4. echo 
  5. <div class="opis">".$wiersz['opis']."</div>
  6.  ";}
  7. ?>


Gdzie mam to zaplikować ?
<?php
echo cutString($tekst, $ile_znakow_chcesz);
?>
Vogel
@thrnag: kiedys juz bylo cos podobnego. tylko po co tworzyc takie koszmarki z FOR() ? nie lepiej uzyc wyrazen regularnych? pozatym on wycina tylko PIERWSZE ?"iks" znakow. a co z kolejnymi stronami? moja propozycja jest taka:

  1. <?php
  2. function cutString($tekst, $od, $ile) {
  3.  return preg_replace("#((.*? |$){0,".$od."})((.*? |$){0,".$ile."}).*#si", "$3", $tekst.' ');
  4. }
  5. ?>


gdzie podajesz $tekst - przycinany tekst, $od - od ktorego slowa tniemy i $ile - ile kolejnych slow ma zwrocic.
thornag
@Vogel, rzeczywiscie nie pomyslalem o tym ze trzeba to wyswietlic na nastepnej stronie smile.gif
Wyrazen regularnych to sie boje jak ognia, w kocu nadejdzie dzien kiedy sie za to wezme pokic o ciesze sie z wlasnej ignorancji :roll2:

W Twoim sposobie widze jednak mala luke. Jesli masz strone oparta na jakims waskim i niewysokim divie i nie chcesz zeby Ci sie rozciagnelo liczenie slow nie jest najlepszym pomyslem. Pozniewaz jesli content bedzie sie skladal tylko z slow "nie, a , do , od, on" itp. bedzie go za malo w momencie slow typu "powylamywanymi, rozentuzjazmowany" i jeszcze jakis zryte wyrazy Div moze sie rozszerzyc psujac weszystko.

Nie mowie ze moj skrypt jest lepszy bo ma podobna dziure (moze mniejsze ryzyko wystapienia rozciagniecia). Ten z wyrazeniem regularnym tez dobry, chyba zaleznie od tego co sie chce osiagnac. W kazdym badz razie dzieki za przyklad.

Do tego pytanie. Czy wyrazenia regularne nie beda wolniejsze w tym przypadku.

@miki_ok

  1. <?php
  2.  
  3.  
  4. if($wiersz=mysql_fetch_array ($wykonaj)) {
  5.  
  6. echo 
  7.  
  8. <div class="opis">".cutString($wiersz['opis'], 250)."</div>
  9.  
  10.  ";}
  11.  
  12. ?>


Luo. Jesli chcesz ten sam tekst wysweitlic na nastepnej stronie to moj skrypt sie nie nadaje do uzycia go w tej sytuacji. Wtedy najlepiej.

  1. <?php
  2.  
  3.  
  4. if($wiersz=mysql_fetch_array ($wykonaj)) {
  5.  
  6. echo 
  7.  
  8. <div class="opis">".cutString($wiersz['opis'], 1, 100)."</div>
  9.  
  10.  ";}
  11.  
  12. ?>


Na kolejnej czesci

  1. <?php
  2.  
  3.  
  4. if($wiersz=mysql_fetch_array ($wykonaj)) {
  5.  
  6. echo 
  7.  
  8. <div class="opis">".cutString($wiersz['opis'],101, 200."</div>
  9.  
  10.  ";}
  11.  
  12. ?>
miki_ok
Bardzo panom dziękuje za pomoc.
Al bardziej by mi zależało na czymś w stylu:
  1. <?php
  2. $ile_stron = ceil ($ile_rekordow / 5);
  3. $start_st=$strona >3?($strona - 3):1;
  4. $stop_st=$strona < ($ile_stron-3)?$start_st+6:$ile_stron;
  5.  
  6. if($start_st!=1) {
  7. echo '<< <a href="http://www.bleble.pl/strona='.(($start_st-6<1)?1:$start_st-6).'"> poprzednie </a>';
  8. echo " [...] ";}
  9. for($licznik_st=$start_st; $licznik_st<=$stop_st; $licznik_st++)
  10. {
  11. if ($licznik_st != $strona) echo '<a href="http://www.bleble.pl/strona='.$licznik_st.'"><b>';
  12. echo '&nbsp;&nbsp;'.$licznik_st;
  13. if ($licznik_st != $strona) echo '</b></a>';
  14. }
  15. if($stop_st!=$ile_stron) {echo " [...] ";
  16. echo '&nbsp;<a href="http://www.bleble.pl/strona='.(($licznik_st+3<$ile_stron)?$licznik_st+3:$ile_stron).'"> następne >></a>';}
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23. $ile_stron = ceil ($ile_rekordow / 5);
  24. ?>


Tyle że to dzieli mi na strony ale jak mam jakieś np. 40 tematów w bazie to mi dzieli np. po 10 na stronie. Niewiem może potrafilibyście to tak przerobić żeby dzieliło text. rolleyes.gif
thornag
Podziel ilosc znakow w stringu przez to ile chcresz ich wyswietlic na strone. Bedzies zmial wynik. Wydrukuj link i rozpocznij dzielenie pliku od slowa jakie przekazesz w GETcie
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.