• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Podzielenie tekstu na strony (paginacja)

0 głosów
243 wizyt
pytanie zadane 6 maja 2019 w PHP przez Whereismycode Obywatel (1,710 p.)

W jaki sposób mogę napisać paginacje strony, ale tylko gdy tekst przekracza granicę 500 znaków?

Teraz zachodzi kolejne pytanie. Gdy instrukcja warunkowa już sprawdzi długość to łatwo domyślić się, że ostanie słowo zostanie ucięte, co stylistycznie wygląda okropnie. Pomysł który przychodzi mi na myśl to zamiast liczyć znaki to być może łatwiej policzyć słowa, ale czy tekst z bazy w takiej formie będzie można policzyć jako tekst?

Przykład:

<span style="font-size:20px;">Tekst który został <b>dodany</b> przez edytor tekstu</span>

 

komentarz 6 maja 2019 przez Perseusz Bywalec (2,180 p.)
edycja 6 maja 2019 przez Perseusz

Możesz zostać przy liczeniu znaków i odciąć ostatnie słowo:

if(strlen($twojString) > 500){
  $pozycjaOstatniejSpacji = strrpos($twojString, ' ', 501);
  $stringZastepczy = '...';

  # Usuwa znaki po ostatniej spacji i wstawia „...” (spacje też)
  $stringBezOstatniegoSlowa = substr_replace(
    $twojString,
    $stringZastepczy,
    $pozycjaOstatniejSpacji
  );
}

Dość obrazowo to napisałem, wydaje mi się że dobrze

https://php.net/manual/en/function.strrpos.php

1 odpowiedź

0 głosów
odpowiedź 6 maja 2019 przez mrspock1 Mądrala (6,420 p.)
A może zrobić tak, jak już będziesz miał przybliżoną długość kolejnego fragmentu tekstu, to poszukać w obie strony najbliższe miejsce gdzie się kończy akapit. Jeśli to będzie niedaleko od przybliżonej długości, to tam skończysz jeden fragment. Prawidłowo podzielony tekst na akapity powinien mieć ich dużo i podział wyjdzie prawidłowo. Nie przypominam sobie żeby robiono inaczej.

 

Teoretycznie możesz od wyliczonej przybliżonej długości śledzić w którąś stronę , gdzie jest koniec wyrazu (najbliższa spacja) i przesunąć długość fragmentu do tej spacji. Przy liczeniu kolejnego fragmentu zawsze licz od początku żeby zapewnić, że algorytm liczy zawsze ten sam koniec, niezależnie od tego który fragment liczysz.

 

Nie wiem czy tak jest praktykowane, ale wydaje mi się że cała duża strona jest zapisana w jednym polu bazy danych. Wtedy dla tego pola robisz tabelę "jeden do wielu" i w tej tabeli "wiele" zapisujesz kolejne numery znaku końcowego podzielonych fragmentów (żeby nie liczyć za każdym razem). Do tej tabeli "wiele" obliczenia byłyby robione za każdym razem tylko wtedy, gdy nastąpi edycja tekstu w tabeli głównej.

Podobne pytania

0 głosów
2 odpowiedzi 970 wizyt
pytanie zadane 13 czerwca 2020 w PHP przez Bakkit Dyskutant (7,600 p.)
0 głosów
0 odpowiedzi 320 wizyt
pytanie zadane 8 grudnia 2018 w PHP przez niezalogowany
0 głosów
0 odpowiedzi 261 wizyt
pytanie zadane 3 lutego 2018 w PHP przez mi-20 Stary wyjadacz (13,250 p.)

93,608 zapytań

142,531 odpowiedzi

323,002 komentarzy

63,099 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...