Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [klasa]Stronicowanie
piotrooo89
post
Post #1


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Jako że OOP od pewnego czasu znam czysto z teori postanowiłem napisać coś co mogłoby mi się przydać. Przerobiłem własny sturkturalny kod stronicowania i teraz prosze was o wszelkie uwagi, rady - konstruktywną krytykę - jak dla laika OOP.

index.php

  1. <?php
  2. include ('stronicowanie-class.php');
  3. include ('mysql.php');
  4.  
  5. if(empty($_GET['start']))
  6. {
  7.  $od = 1;
  8.  $_GET['page'] = 1;
  9. }
  10. else
  11. {
  12.  $od = mysql_escape_string($_GET['start']);
  13. }
  14.  
  15. $str = new Stronicowanie();
  16. $str->pokaz($od);
  17. $str->nawigacja($str->licz_rekordy());
  18. $str->pop_nas($_GET['start'], $str->licz_rekordy());
  19. ?>



stronicowanie-class.php

  1. <?php
  2. class Stronicowanie
  3. {
  4.  public $ile_na_stronie = 20;
  5.   
  6.  public function licz_rekordy()
  7.  {
  8.      $all = mysql_query('SELECT COUNT(*) FROM termin');
  9.      $ile = mysql_result($all, 0);
  10.      return $ile;
  11.  }
  12.  
  13.  public function pokaz($od)
  14.  {
  15.      $sql = mysql_query('SELECT * FROM termin LIMIT '.$od.', '.$this->ile_na_stronie.'');
  16.      while ($row = mysql_fetch_object($sql))
  17.      {
  18.          echo $row->id;
  19.          echo $row->data .'<br>';
  20.      }
  21.  }
  22.  
  23.  public function nawigacja($ile)
  24.  {
  25.      if($ile > $this->ile_na_stronie)
  26.      {
  27.          for($i=0 ; $i<ceil($ile/$this->ile_na_stronie) ; $i++) 
  28.          {
  29.              $b = $i + 1;
  30.              if ($_GET['page']==$b)
  31.              {
  32.                  echo '<a href="'.$_SERVER['PHP_SELF'].'?start='.($i*$this->ile_na_stronie).'&page='.($i+1).'">['.($i+1).']</a> | '; 
  33.              }
  34.              else
  35.              {
  36.                  echo '<a href="'.$_SERVER['PHP_SELF'].'?start='.($i*$this->ile_na_stronie).'&page='.($i+1).'">'.($i+1).'</a> | '; 
  37.              }
  38.          }
  39.      }
  40.  }
  41.  
  42.  public function pop_nas($naw, $ile)
  43.  {
  44.      $next = $naw + $this->ile_na_stronie;
  45.      $prev = $naw - $this->ile_na_stronie;
  46.   
  47.      if ($_GET['start'] == 0)
  48.      {
  49.          echo '<a href="'.$_SERVER['PHP_SELF'].'?start='.$next.'&page='.($_GET['page']+1).'">Następny ></a>';
  50.      }
  51.      elseif (($_GET['start'] > 0) && ($next < $ile))
  52.      {
  53.          echo '<a href="'.$_SERVER['PHP_SELF'].'?start='.$prev.'&page='.($_GET['page']-1).'">< Poprzedni</a> | '; 
  54.          echo '<a href="'.$_SERVER['PHP_SELF'].'?start='.$next.'&page='.($_GET['page']+1).'">Następny ></a>';
  55.      }
  56.      elseif ($next > $this->ile_na_stronie)
  57.      {
  58.          echo '<a href="'.$_SERVER['PHP_SELF'].'?start='.$prev.'&page='.($_GET['page']-1).'">< Poprzedni</a>';
  59.      }
  60.  }
  61. }
  62. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


To jest tragedia, czym to się różni od kawałka kodu typu:

  1. <?php
  2. echo 'coś';
  3.   echo 'ktoś'
  4.   echo 'nicoś';
  5. ?>
który includujesz w miejscu, w którym ma się wyświetlać to stronicowanie i który tak naprawdę nie nadaje się do wykorzystania w żadnym innym miejscu nawet na tej samej stronie? Pomijając już fakt, że potrzebujesz aż dwóch zapytań do bazy i inne szczegóły, ale takiego kodu nie warto nawet analizować.

Kiedyś znalazłem na tym forum i usprawniłem taką funkcję:
  1. <?php
  2. function tresc_pasek($l_odp,$l_odp_nastronie,$l_odp_napasku,$a) { //funkcja tworząca nawigację
  3.   $l_odp_podz = intval($l_odp/$l_odp_nastronie)+1;
  4.   $l_odp_podz_mod = $l_odp%$l_odp_nastronie;
  5.   if($l_odp_podz_mod>0){++$l_odp_podz;}
  6.   if($a>=$l_odp_podz){$a=$l_odp_podz-1;}
  7.   if($a>1){$tablica['prev']=$a-1;}else {$tablica['prev']=0;}
  8.   if($a<=$l_odp_napasku){$koniec=$l_odp_napasku*2+2;}else{$koniec=$a+$l_odp_napasku+1;}
  9.   if($a<=$koniec-$l_odp_napasku){$star=$a-$l_odp_napasku;}
  10.   if($a>=$l_odp_podz-$l_odp_napasku){$star=$l_odp_podz-$l_odp_napasku*2-1;}
  11.   if($koniec>$l_odp_podz){$koniec=$l_odp_podz;}
  12.   if($star<1){$star=1;}
  13.   for($i=$star;$i<$koniec;++$i){
  14.      if($i<$a){$tablica[]=$i;}
  15.      if($i==$a){$tablica['active'] = $i;}
  16.      if($i>$a){$tablica[]=$i;}    
  17.   }
  18.   if($a<$l_odp_podz-1){$tablica['next']=$a+1;}else{$tablica['next']=0;}
  19.   return $tablica;
  20. }
  21. ?>
- podajesz liczbę rekordów, porcję rekordów na stronę, wielkość paska i numer bieżącej strony - funkcja zwraca tablicę stron (z oznaczeniem która jest bieżąca, która pierwsza a która ostatnia i we właściwej kolejności), którą możesz teraz opakować HTML'em - tak to ma działać, pisanie kodu, który ma statycznie echować HTML na monitorze jest bez sensu, a wykorzystywanie w tym celu obiektówki jest jak dla mnie absurdalne.

Podstawą jest:
- wywalenie HTML z kodu
- parametryzacja a parametry wprowadzane do klasy z zewnątrz, a nie definiowane wewnątrz niej
- operowanie na zmiennych (a nie echowanie co popadnie na ekran)

Bo jak sobie wyobrażasz wykorzystanie tego stronicowania? Będę godzinę poprawiał kod HTML i zapytania do bazy, a kiedy już sobie tą "klasę" zaincluduję to zdumiony stwierdzę, że brak zmiennej, którą mogę wyświetlić na stronie a zamiast tego skrypt coś echuje, kiedy ja jeszcze generuję stronę i w efekcie dostanę taki kod:
  1. <a href="">Tu Twoje stronicowanie się wyechuje</a>
  2. <!-- a tu się zaczyna moja strona i nic nie mogę na to poradzić
  3. <html>
- nie mówiąc już o tym, że kiedy będę chciał przekazać do tej "klasy" jakieś parametry (np. liczbę rekordów) to nie będę mógł, bo już się to na ekranie drukuje i drukuje i nie mogę tego powstrzymać! A jak będzie gdzieś dalej jakiś błąd to co? Każe przeglądarce zwrócić czym prędzej to co wyechowałem i odesłać mi z powrotem? Nie sądzisz, że to się kupy nie trzyma?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.10.2025 - 08:18