Kilka moich uwag .
- Prosze wszystkie swoje zastrzeżenia zapisać niezależnie od tego jak błache lub jak ostre będą

- Komentarze sa po polsku gdyz bardzo sie spieszylem w napisaniu ich ; ) .
- Za literowki przepraszam ( patrz punkt wyzej ).
- W kilku miejscach miesza sie jezyk polski z jezykiem angielskim ( np zmienne sa po angielsku a niektore komunikaty po polsku ) . Tym takze zajme sie jak juz bede mogl
- Kod testowany przy pomocy apache dziala poprawnie .
To tyle slowem wstepu.
<?php abstract class Pagination { /** Zmienna zawierajaca wyniki zwrocone przez baze danych */ var $results; /** Zmienna zawierajaca wartosc okreslajaca limit wynikow na 1 stronie */ var $limit; /** Zmienna zawierajaca pelny adres strony www ktora ma zostac poddana dzialaniu poszczegolnych funkcji */ var $www_name; /** Zmienna zawierajaca wartosc okreslajaca ilosc podstron */ var $pages; /** Zmienna zawierajaca kopie polaczenia z baza danych */ var $sql_connection; /** Zmienna zawierajaca numer ostatniej podstrony */ var $last_page; /** Zmienna zawierajaca numer pierwszej podstrony */ var $first_page; /** Zmienna zawierajaca zapytanie ktore zostanie uzyte do wyswietlenia odp ilosci wynikow na strone( np wprowadzamy 'SELECT * from registered_users order by user_id' do tego zapytania zsostanie dodana odp linijka, */ var $question_limit; /** Zmienna zawierajaca zapytanie ktore zostanie uzyte do wyliczenia wymaganej ilosci podstron np ' SELECT * from registered_users ' */ var $question_all; /** Funkcja odpowiedzalna za pobranie odpowiednich parametrow i sprawdzenie ich wartosci * @parametr $data(Tablica zawierajaca kolejno , * pelna nazwe strony ktora zostanie podzielona na podstrony, * zapytanie ktore zostanie uzyte do wyswietlenia odp ilosci wynikow na strone( np wprowadzamy 'SELECT * from registered_users order by user_id' do tego zapytania zostanie dodana odp linijka, * zapytanie ktore zostanie uzyte do wyliczenia wymaganej ilosci podstron np ' SELECT * from registered_users ', * limit wynikow na jednej podstronie * @parametr $sql_connection( Zmienna zawierajaca kopie polaczenia z baza danych) */ public function create($data = '' , $sql_connection) { $this->www_name = $data[0]; $this->question_limit = $data[1]; $this->question_all = $data[2]; $this->limit = $data[3]; $this->sql_connection = $sql_connection; $sql_connection->disconnect(); try { { throw new Exception('Nie podano wartosci zmiennej www_name'); } { throw new Exception('Nie podano wartosci zmienniej question_all'); } { throw new Exception('Nie podano wartosci zmienniej question_all'); } { throw new Exception('Nie podano wartosc zmiennej limit'); } { throw new Exception('Nie podano wartosci zmiennej sql_connection'); } } catch (Exception $e) { exit; } $sql = $this->sql_connection; $sql->question($this->question_all); $this->results = $sql->num_rows(); /** Przypisanie odp wartosci do zmiennych pages i results */ /** Jezeli ilosc wynikow na ostatniej stronie jest mniejsza niz wartosc zmiennej limit */ if(($this->results)%($this->limit)) { /** $last_page - zmienna okreslajaca ilosc wyniko na ostatniej stronie */ $last_page = $this->results % $this->limit; /** Obliczenie potrzebnej ilosc podstron * Przyklad * Ilosc wynikow = 23 * Limit wynikow na stronie = 4 * Ilosc wynikow na ostatniej stronie(obliczona wczesniej) = 3 * ILOSC PODSTRON = ((23-3)/4)+1 = 6 */ $this->pages = ((($this->results-$last_page)/$this->limit)+1); } /** Jezeli nie jest mniejsza czyli jest rowna */ else { $this->pages = $this->results / $this->limit; } $this->last_page = $this->pages; $this->first_page = 1; } abstract protected function make($fields=''); } class NewsPagination extends Pagination { /** Funkcja odpowiedzalna za wyswietlenie wynikow i podzielelnie ich na podstrony * @parametr $fields jest odpowidzialny za zamiane domyslnych pol "field" z bazy danych podczas wyswietlania wynikow */ public function make($fields='') { { $id = $_GET['page']; } else { $id = 1; } /** Aktualizacja zapytania question_limit tak aby nadawalo sie do wyswietlania odp ilosc wynikow */ $this->sql_connection->question($this->question_limit.' LIMIT '.(($id*$this->limit)-4).','.$this->limit.';'); /** Wyswietlenie wynikow na stronie */ $this->sql_connection->write_news($fields,'news',$www_name); /** Kod odpowiedzialny za stronicowanie wynikow */ /** Jezeli w adresie wartosc $_GET['page'] jest poza zakresem podstron ( np ktos ja tam wpisal ) to skrypt * nie wyswietla nic */ /** Jezeli jestesmy na pierwszej podstronie to link POPRZEDNIA przekieruje nas do tej podstrony */ if($id==1) { } /** Jezeli nie to zostaniemy przekierowani do podstrony o numerze o 1 mniejszym */ else { } /** Jezeli jestesmy na ktorejs z podstron o numerach [1,6] to wykonaj */ if($id<=6) { /** Jezeli jest mniej niz 10 podstron wynikow to wykonaj */ if($this->last_page<10) { /** Petla wypisujaca podstrony z przedzialu [1,strona ostatnia] */ for($i=1;$i<=$this->last_page;$i++) { /** Numer strony na ktorej jestesmy zostanie dodatkowo odsuniety spacjami od sasiadujacych numerow */ if($id==$i) { } /** Reszta linkow zostanie zapisana normalnie */ else { } } } /** Jezeli jest wiecej niz 10 podstron wynikow */ else { /** Petla wypisujaca podstrony z przedzialu [1,10] */ for($i=1;$i<=10;$i++) { /** Dzialamy analogicznie jak w czesci powyzej */ if($id==$i) { } else { } } } } /** Jezeli jestesmy na podstronie oddalonej od strony ostatniej o 5 wynikow lub wiecej to wykonaj */ else if($id >= $this->last_page-5) { /** Petla dzieki ktorej nie wyswietla sie numery podstron wiekszych od numeru ostatniej podstrony */ for($i=($id-5);$i<=($this->www_name);$i++) { /** Dzialamy analogicznie jak w czesci powyzej */ if($id == $i) { } else { } } } /** Jezeli jestesmy na stronie z przedzialu [7,ostatnia_strona-6] */ else { for($i=($id-5);$i<=($id+5);$i++) { if($id == $i) { } else { } } } if($id == $this->last_page) { } else { } } } ?>
A tutaj wrzucam kod klasy Sql ( w pierwszym poscie nie bylo miejsca )
class Sql { /** ZMIENNA ZAWIERAJACA NAZWE HOSTA */ var $db_host; /** ZMIENNA ZAWIERAJACA LOGIN UZYTKOWNIKA DO BAZY DANYCH */ var $db_login; /** ZMIENNA ZAWIERAJACA HASLO UZYTKOWNIKA DO BAZY DANYCH */ var $db_password; /** ZMIENNA ZAWIERAJACA NAZWE WYBRANEJ BAZY DANYCH */ var $db_name; /** ZMIENNA ZAWIERAJACA REZULTAT Z PROBY POLACZENIA Z BAZA DANYCH */ var $db_connection; /** ZMIENNA ZAWIERAJACA REZULTAT WYSLANIA ZAPYTANIA DO BAZY DANYCH W POSTACI TABLICY */ /** ZMIENNA ZAWIERAJACA TABLICE REKORDOW */ var $db_lastid; /** ZMIENNA ZAWIERAJACA ZAPYTANIE WYSLANIE DO BAZY DANYCH */ var $db_question; /** FUNKCJA ODPOWIADAJACA ZA WYPISANIE KOMUNIKATU O BLEDZIE */ var $db_data = ''; function error() { } /** FUNKCJA ODPOWIEDZIALNA ZA NAWIAZANIE POLACZENIA Z BAZA DANYCH * @param $db_name - zmienna przechowujaca nazwe bazy danych */ function connect($db_data) { $this->db_data = $db_data; $this->db_host = $db_data[0]; $this->db_login = $db_data[1]; $this->db_password = $db_data[2]; $this->db_name = $db_data[3]; try { { throw new Exception('Wartosc zmiennej db_name jest nieprawidlowa!'); } { throw new Exception('Wartosc zmiennej db_host jest nieprawidlowa!'); } { throw new Exception('Wartosc zmiennej db_login jest nieprawidlowa!'); } { throw new Exception('Wartosc zmiennej db_password jest nieprawidlowa!'); } } catch(Exception $e) { return false; } $this->db_connection = new mysqli($this->db_host,$this->db_login,$this->db_password); $connection = $this->db_connection; { $connection->select_db($this->db_name); return true; } else { $this->error(); return false; } } /** FUNKCJA ODPOWIEDZIALNA ZA WYSLANIE ZAPYTANIA DO BAZY DANYCH * @param $db_question - zmienna przechowujaca zapytanie do bazy danych */ function question($db_question) { { $this->db_question = $db_question; { $connection = $this->db_connection; $this->db_result = $connection->query($db_question); { return true; } else { $this->error(); return false; } } else { $this->error(); return false; } } else { return false; } } /** FUNKCJA ODPOWIEDZIALNA ZA PRZYPISANIE WYNIKOW DO ODP ZMIENNEJ (OTRZYMANYCH W WYNIKU ZAPYTANIA DO ODP ZMIENNEJ) */ function fetch() { { $record = $this->db_result->fetch_array(); { $this->db_records = $record; return $record; } else { $this->error(); return false; } } else { return false; } } /** FUNKCJA ODPOWIADAJACA ZA PODANIE ILOSCI "num_rows" */ function num_rows() { return $this->db_result->num_rows; } /** FUNKCJA ODPOWIADAJACA ZA WYPISANIE WYNIKOW Z BAZY DANYCH NA EKRANIE * @param $fields - zmienna przechowujaca tablice nazw pol ktorych chcemy uzyc jako alternatywe dla pol * typu "field" z bazy danych mysql * @param $table - zmienna przechowujaca nazwe columny */ function write($fields = '',$table='') { $sql = new Sql(); $sql->connect($this->db_data); $sql->question('SHOW COLUMNS from '.$table); { for( $n = 0 ; $n < $amount_of_fields ; $n++) { $field[$n] = $sql->fetch(); } while($row = $this->fetch()) { $column = 0; for($i = 0; $i<$amount_of_fields; $i++) { if($column == 0) { $column++; } else if($column == 1) { $column--; } } } } else { for( $i = 0 ; $i < ($sql->num_rows()+1) ; $i++) { $field[$i] = $sql->fetch(); } while($row = $this->fetch()) { for($i = 0; $i < $sql->num_rows() ; $i++) { } } } } /** FUNKCJA ODPOWIADAJACA ZA ZMIANE BAZY DANYCH * @param $db_name - zmienna przechowujaca nazwe bazy danych do ktorej chcemy sie przelaczyc */ function change_database($db_name) { $this->db_name = $db_name; $this->disconnect(); $this->connect($db_name); } /** FUNKCJA ODPOWIADAJACA ZA ROZLACZENIE SIE Z BAZA DANYCH */ function disconnect() { { $db_result->free(); } } }