Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pager (stronicowanie)
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Stron: 1, 2, 3, 4, 5
br0nks
  1. <?
  2. //Ładowaniu pliku konfiguracyjnego bazy danych i połączenie z bazą
  3. include "config.php";
  4.  
  5. //Ustalenie ilości wyświetlanych newsów na stronie
  6. define('limit_newsow', 15);
  7.  
  8. $result = "SELECT SQL_CALC_FOUND_ROWS * FROM newsy ORDER BY id DESC, id DESC LIMIT ".mysql_escape_string((int)$_GET['s'] *limit_newsow).",".limit_newsow;
  9.  
  10. //Pobiera ilosc_newsow rekordów z bazy, sortując wg daty rosnąco, zaczynając od $_GET['s']*ilosc_newsow
  11. $RES = mysql_query($result); // wykonujemy zapytanie
  12. while($AFR = mysql_fetch_assoc($RES)){
  13.  
  14. /*Wyświetlanie wyników:*/
  15.  
  16. $id=''.$AFR['id'].'';
  17. $text=''.$AFR['text'].'';
  18.  
  19.  
  20. echo "$id - $text";
  21.  
  22. }
  23.  
  24. ?>


  1. <?php
  2. require_once('Pager.class.php');
  3. $sql = 'select count(*) from newsy';
  4. $result = mysql_query($sql);
  5. $row = mysql_fetch_array($result);
  6. $recordsCount = $row[0];//pobranie liczby rekordĂłw
  7. try{
  8. $pager = new Pager('s');
  9. $pager->SetTotalRecords($recordsCount);
  10. $pager->Make(true);
  11. $pag = $pager->Render();
  12. $start = $pager->GetIndexRecordStart();
  13. $end = $pager->GetIndexRecordEnd();
  14. }
  15. catch (Exception $e) {
  16. echo $e->getMessage();
  17. }
  18.  
  19. //zapytanie z uwzglenieniem stronicowania
  20. $sql = 'select * from newsy limit '.$start.','.($end - $start + 1);
  21. //...pobranie wynikĂłw i ich wyswietlenie
  22.  
  23. echo $pag;//wyswietlenie pager'a
  24. ?>



i caly czas chodzi o to co wyzej:)
ze gdy mam index.php?s=0 to wzsystko jest tak jak aktualnie w bazie,
a gdy klikne na index.php?s=1 to pokazuja mi sie rekordy nie kolejne, tylko jeszcze kolejne, czyli omija jedna 15nastke... i pod s=1 mam to co POWINNO byc pod s=2. a pod s=0 to co pod s=1 winno byc:)

i chcialbym aby index.php?s=0 bylo tym index.php?s=1
a nie idzie tego zrobic :/

jasniej chyba sie nie da ;p
nospor
Przecież pierwszy kod który pokazałeś w poście wyżej nie ma żadnego związku z moim pagerem.
Drugi zaś kod co pokazałeś jest moim kodem na żywca skopiowanym z przykładu.

NIgdzie nie podpiąłeś mojego pagera u siebie więc naprawdę nie wiem skąd te pytania, że coś nie działa, skoro nigdzie nie podpiąłeś mojego pagera
br0nks
teraz to ja nie rozumiem biggrin.gif hahahaha

ten 2gi kod to nie Twoj pager?
bo wsumie to juz sam nie rozumiem..

no to jak mam zrobic, zeby ten moj 1 kod, ktory wyswietla newsy, zastapic Twoim? bo nie widze nic, co bym mogl zrobic, z Tych Twoich plikow..
sora, ale naprwde nie kumam ocb w tym pagerze:)

jakies rozwiazanie? pomoc?

ps: mam tylko w mojej tabeli: id, ile, text
newsy moje potrzebuja tylko id i text, a widze, ze u CIebie jest jeszcze jakeis sortowanie.. kurde nie kminie tego ;p

EDIT:
Hm.. chyba sobie z tym poradzilem:)
teraz sprawdze kilka rzeczy, czy da rade tak jak ja to widze, i dam tu znac:)


EDIT2:
no i wsyzstko smiga, ale strna wyglada jakby wolniej dzialala...
i zostaje tylko juz jedno... jak zrobic aby zamiast >| byl numer ostatniej strony?

i czy mozna tak zrobic ta nawigacje aby wygladala tak:
http://woork.blogspot.com/2008/03/perfect-...-using-css.html
lub tak:
http://www.thewebhelp.com/css/pagination-style-template/?

pozdrawiam:)
nospor
Cytat
i zostaje tylko juz jedno... jak zrobic aby zamiast >| byl numer ostatniej strony?

i czy mozna tak zrobic ta nawigacje aby wygladala tak:
http://woork.blogspot.com/2008/03/perfect-...-using-css.html
lub tak:
http://www.thewebhelp.com/css/pagination-style-template/?
Oczywiście, że można. Na wiele sposobów.
Możesz napisać funkcję generującą kod pagera, możesz przekazać funkcję generującą kod pagera, możesz pobrać tablicę pagera i sam wygenerować dla niej kod. Wszystko masz w przykładach w paczce
br0nks
sweitnie, nie pomogles mi w niczym o co pytalem.. dzieki wielkie.
nospor
blink.gif
br0nks
Nie wiem co się stało, ale nagle z dnia na dzień, przestał działać...a nie zmieniałem nic od miesiąca na stronie...

Kod
Parse error: syntax error, unexpected '{' in /index.php on line 316


a 316 linijka index.php wygląda tak:
Kod
try{


a całe zapytanie tak:
  1. <?php
  2. require_once('Pager.class.php');
  3. $sql = 'select count(*) from newsy';
  4. $result = mysql_query($sql);
  5. $row = mysql_fetch_array($result);
  6. $recordsCount = $row[0];//pobranie liczby rekordĂłw
  7. try{
  8. $pager = new Pager('s');
  9. $pager->SetTotalRecords($recordsCount);
  10. $pager->Make(true);
  11. $pag = $pager->Render();
  12. $start = $pager->GetIndexRecordStart();
  13. $end = $pager->GetIndexRecordEnd();
  14. }
  15. catch (Exception $e) {
  16. echo $e->getMessage();
  17. }
  18.  
  19. //zapytanie z uwzglenieniem stronicowania
  20. $sql = 'select * from newsy limit '.$start.','.($end - $start + 1);
  21. //...pobranie wynikĂłw i ich wyswietlenie
  22.  
  23. echo $pag;//wyswietlenie pager'a
  24. ?>


lub jeżeli usunę całe to zapytanie, to wyskakuje kolejny błąd:
  1. Parse error: syntax error, unexpected T_CONST, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /Pager.class.php on line 34


a 34 linijka Pager.class.php wygląda tak:
Kod
const GOTO_FIRST = 'gtf';


i o co tu chodzi to nie mam pojęcia...a nawet nic nie zmieniałem od kiedy wszystko dobrze działało..
nospor
Odpalsz skrypt napisany w php5 na php4.
Skoro nagle ci przestało działać to zapewne zmienił ci się php smile.gif

NIe masz przypadkiem hostingu w 1and1? Tam na dniach właśnie zrobili downgrade z php5 na php4 i kupie ludzi przestały działać aplikacje smile.gif
br0nks
dokładnie tam mam hosta..
i co teraz mam zrobić z tym fantem? smile.gif
dawidox66
a w ogole jaki cel jest takiego downgrade?
mlawnik
Może rozszerzenie *.php5?

Ale jak wywalili php5 to zmiana dostawcy :|
br0nks
Cytat(mlawnik @ 28.04.2011, 21:22:14 ) *
Może rozszerzenie *.php5?



dokładnie tak. gra gitarka teraz guitar.gif

dzieki rolleyes.gif
mlawnik
Proszę bardzo.
br0nks
a nie da się jakoś zrobić aby nie wpisywać rozszerzenia .php5 tylko aby było ,php a żeby plik sam rozpoznał ze to php5?
np żeby coś dopisać na początku pliku .php?

edit:
na 1and1.pl zadziałało, do .htaccess:
Kod
AddType application/x-httpd-php5 .php5


gdyby ktoś potrzebowałsmile.gif
lobopol
Mam problem ze zdefiniowanym linkiem
  1. $oPager = new lib_Pager('pagination', lib_Url::make('main',array('page'=>'#PAGE#')),false); //link ma formę link,#PAGE#.html
  2. $oPager->SetTotalRecords(10000);
  3. $oPager->SetRecordsPerPage(10);
  4. $oPager->SetPagesPerNav(10);
  5. $oPager->Make();
  6. $this->sNav = $oPager->Render();
  7.  

Paginacja jest tworzona, ale nie zmieniają się linki w niej po przejściu na kolejne strony

Ps. Już sobie poradziłem drobna modyfikacja aby nie patrzeć na geta, a na parametr przekazywany
northwest
Witam serdecznie,
mam taki kod:
  1. try {
  2. $tablicailosci = $ms->query_select("SELECT COUNT(id) AS ile FROM baza ;");
  3. } catch (Exception $error) {
  4. echo '<b>Komunikat</b>: ' . $error->getMessage() . '<br /><b>Plik</b>: ' . $error->getFile() . '<br /><b>Wiersz</b>: ' . $error->getLine() . '<br /><b>IP</b>: ' . $_SERVER['REMOTE_ADDR'] . ' | <b>LINK</b>: ' . $_SERVER['REQUEST_URI'] . '<br /><br />' . $error->getTraceAsString();
  5. }
  6. try {
  7. //$pager = new Pager($webid['4'], "$url/cars/komis/page/#PAGE#", 'strona');
  8. $pager = new Pager('', "$url/cars/komis/page/#PAGE#");
  9. $pager->RecordsPerPage = 1;
  10. $pager->SetTotalRecords($tablicailosci['0']['ile']);
  11. $pager->Make(true);
  12. $pag = $pager->Render();
  13. $start = $pager->GetIndexRecordStart();
  14. $end = $pager->GetIndexRecordEnd();
  15. } catch (Exception $e) {
  16. echo $e->getMessage();
  17. }

linki mam w takiej formie: mojanazwa.pl/cars/komis/page/1 , mojanazwa.pl/cars/komis/page/2 itp...

Menu wyświetla mi się poprawnie, tylko jak kliknę na jakąś stronę, to nie zaznacza się poprawna wartość na tej paginacji sad.gif
np mam : 1,2,3,4,5,6 - klikam na 4, strona się przaładowywuje ale dalej mam zaznaczoną 1 sad.gif


Wie ktoś może dlaczego?


northwest
nospor
No ale w $_GET Twój ruter ustawia index page?

Zrób
print_r($_GET);
zapewne go tam nie ma.
Jeśli nie ma to ty będziesz musiał ręcznie dla pagera ustawiać stronę.
northwest
tablica jest pusta sad.gif

Jak ręcznie wstawić pozycję? zamiast #PAGE dać wartość "ręcznie"?

zmieniłem na próbę na coś takiego: $pager = new Pager('', "$url/cars/komis/page/3");
i teraz linki są w formie:
http://localhost/cars/komis/page/3?pp=4
http://localhost/cars/komis/page/3?pp=7
http://localhost/cars/komis/page/3?pp=5

i zaznacza poprawnie... tylko te zmienne są na końcu, a chciałbym żeby były po "page"...

wiesz może dlaczego tak jest?
nospor
Nie, masz zostawić wszystko jak było, nic nie kombinuj.
Powiedzialem, że musisz jedynie ręcznie ustawić aktualną strone a ty to źle zrozumiałeś.
Masz zrobić tak:
  1. //.....
  2. $pager = new Pager('', "$url/cars/komis/page/#PAGE#");
  3. $pager->SetActualPage(XYZ); //TU ZA XYZ masz wstawić aktualną stronę. Ty ją znasz bo to ty generujesz ładny url i twój ruter ma gdzieś info o page
  4. $pager->RecordsPerPage = 1;
  5. $pager->SetTotalRecords($tablicailosci['0']['ile']);
  6. $pager->Make(true);
  7. $pag = $pager->Render();
  8. //.....
northwest
zrobiłem tak jak mówiłeś:
  1. $pager = new Pager('', "$url/cars/komis/page/#PAGE#");
  2. $pager->SetActualPage("$url/cars/komis/page/".$webid['4']);
  3. $pager->RecordsPerPage = 1;
  4. $pager->SetTotalRecords($tablicailosci['0']['ile']);
  5. $pager->Make(true);
  6. $pag = $pager->Render();


gdzie $webid['4'] zawiera aktualny numer strony i nie działa.... zaznacza uparcie 4 strone.... bez względu co wybiore:/
nospor
Nie wiem jak ci to wytłumaczyć....

$pager->SetActualPage(TU MASZ WSTAWIĆ LICZBĘ! TĄ LICZBĄ JEST WARTOŚĆ PAGE);

Generujesz taki url: $url/cars/komis/page/#PAGE#

W jego wyniku załóżmy masz taki link dla strony nr 2:
http://blabla/cars/komis/page/2

No i teraz Twój ruter przetwarza ten link i wie, że cars i komis to jakaś tam akcja oraz gdzieś przechowuje parametr page. To ty powinieneś wiedzieć skąd ten parametr wziąść bo ty wiesz jaki masz ruter do adresów a nie ja.

Cytat
dzie $webid['4'] zawiera aktualny numer strony i nie działa
Jeśli to $webid['4'] zawiera wartość parametru page z linku to masz wstawić tak:
$pager->SetActualPage($webid['4']);
northwest
super,działa smile.gif)) dzięki:)
JamalBIG
Witam

Może mi ktoś podpowiedzieć jak pozbyć się błędu:
  1. Parse error: syntax error, unexpected '{' in /homez.184/domciu/www/funcs/ogloszenia/kategorie.php on line 87

Wyskakuje mi to po wgraniu na serwer ovh (na innych serwerach nie ma problemu) - fragment kodu to:
  1. try{
  2. $pager_promowane = new Pager('promowane');
  3. $pager_promowane->SetTotalRecords($recordsCount_promowane);
  4. $pager_promowane->Make(true);
  5. $pag_promowane = $pager_promowane->Render();
  6. $start_promowane = $pager_promowane->GetIndexRecordStart();
  7. $end_promowane = $pager_promowane->GetIndexRecordEnd();
  8. }
  9. catch (Exception $e) {
  10. echo $e->getMessage();
  11. }

Błąd odnosi się do linijki 'try{'

Z góry dziękuję za pomoc
Pozdrawiam
nospor
Odpalasz to na php4 a powinienes na php5
melkorm
W pliku .htaccess:

Dla 5.3 :
Kod
SetEnv PHP_VER 5_TEST


dla 5.x - nie pamiętam dokładnie jaka wersja
Kod
SetEnv PHP_VER 5

edzio_max
Mam mały problemik z klasą, mianowicie

Jak zmienić ustawieni linku pagera.

Chodzi mi o to że adres w aktualnościach mam /nowosci/strona/numerstrony z tego sobie wyjmuje id strony działa

Lecz nie wiem ja zrobić aby pager w linku nie dawał idPagera=strona tylko /nowosci/strona/numerstrony

Byłbym wdzięczny za pomoc

Dziękuje

//edit

udąło mi się to zrobić smile.gif
pawel.ad
Hej

Dzięki wielkie za pager - działa świetnie. Mam tylko jedno małe pytanie: jak wyłączyć zapamiętanie ostatniej strony?
Bo działa to tak że przeglądam archiwum newsów, przechodzę na inną stronę i kiedy wracam do strony news, zamiast być na pierwszej stronie i patrzeć na najnowsze newsy, to jestem tam gdzie ostatnio czyli np. na stronie 3.
nospor
$pager->SetUseSession(false);
pawel.ad
Dziękuje bardzo smile.gif
Sobak
Witam,

na wstępie gratuluję klasy - fajnie się z nią pracuje, ułatwia robotę, tak jak być powinno.

Odnoszę jednak wrażenie, że znalazłem błąd. Otóż zależało mi na uzyskaniu tablicy pagera, żeby móc dokonać obróbki po swojej stronie. Lekko zmyliły mnie informacje zawarte w tym temacie (może warto wrzucić najnowsze informacje na górę pierwszego posta? [tak, wiem, to dodatkowa robota dla Ciebie]).

W każdym razie, w końcu doszedłem do tego, że tablica pagera ma być zwracana przez metodę Make(). Zrobiłem var_dump na wyniku jej działania i otrzymałem... true smile.gif

Bez zbędnego przeciągania:
  1. // końcówka metody Make()
  2. return $this->toArray();
  3.  
  4. // Ok, w związku z tym poszedłem pod wskazany adres i ujrzałem to:
  5. // końcówka metody toArray()
  6. return true;


Wystarczyło oczywiście zamienić na:
  1. return $this->array;

i działa ładnie.

Jeśli źle zrozumiałem zasadę działania klasy i narobiłem niepotrzebnego zamieszania, to przepraszam biggrin.gif będę jednak wdzięczny za wyjaśnienie co w takim wypadku robiłem źle.
nospor
  1. /**
  2. * Zwraca tablicę pager'a
  3. *
  4. * @return array
  5. */
  6. public function GetArray() {
  7. if (is_null($this->indexRecordStart))
  8. throw new Exception(sprintf($this->errorMsg['call_get'],'GetArray'));
  9. return $this->array;
  10. }

I myślę że już nic więcej tłumaczyć nie muszę smile.gif
Sobak
Tak... Zauważyłem to oczywiście po napisaniu poprzedniego posta i w momencie, w którym nie miałem przez kilka dni dostępu do internetu. Teraz jedynie zastanawiam się, gdzie przeczytałem informację, że tę tablicę powinna zwracać metoda Make(). Pewnie odnosiło się to do innej wersji lub mam już urojenia - no nieważne - dziękuję za odpowiedź tak czy siak smile.gif
pionas
A da się tak zrobić aby wyświetlało kilka pierwszych stron i kilka ostatnich?
Bo teraz mam coś takiego:
1 2 3 4 5 6 7 8 9 10 11 > >> >|

A chciałbym:
1 2 3 4 5 ... 48 49 50 51 52
nospor
Mój kod zwraca pager w postaci jak pokazałeś.
Ale zwraca też tablicę, której są różne informacje, jak np. liczba stron. Mając te dane, może sobie wyświetlać strony jak ci się podoba.
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.