Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Galeria zdjęć, paginacja
Forum PHP.pl > Forum > Przedszkole
Reiven
Witam,
Tworzę sobie galerię zdjęć. Nie jest oparta o MySQL, gdyż tych zdjęć będzie bardzo dużo, a bazę danych mam o małej pojemności..
Opieram to o pliki tekstowe.
Na stronie z galerią za paginacje odpowiada ajax.
A dokładnie:

  1.  
  2. <div class="item">
  3. <ul>
  4. <li>Pierwszy obiekt na pierwszej stronie</li>
  5. <li>Drugi obiekt na pierwszej stronie</li>
  6. </ul>
  7. </div>
  8.  
  9. <div class="item">
  10. <ul>
  11. <li>Pierwszy obiekt na drugiej stronie</li>
  12. <li>Drugi obiekt na drugiej stronie </li>
  13. </ul>
  14. </div>

Dokładnie na 1 stronie może wyświetlać się maksymalnie 9 miniaturek zdjęć w ustalonej przeze mnie wielkości..
Zdjęcia mam w fodlerach:
galeria > zwierzeta :
- zdj (normalne zdjęcia)
- th (miniaturki)

No i doszedłem na razie do takiego momentu i nie wiem co dalej:

  1. <?PHP
  2.  
  3. $kat = './galeria/zwierzeta/zdj/';
  4. $kat_th = './galeria/zwierzeta/th/';
  5.  
  6. $dir = dir($kat_th);
  7. while($file = $dir->read())
  8.  
  9. if($file != '.' && $file != '..')
  10. $ilosc = count(glob($kat."*.*"));
  11.  
  12. if ($ilosc >= 9)
  13. {
  14. echo' <div class="item">
  15. <ul>';
  16. echo'<li><a href="'.$kat.''.$file.'" rel="example1" title=""><img src="'.$kat_th.''.$file.'" alt="#" /></a></li>';
  17.  
  18. echo '
  19. </ul>
  20. </div>
  21. ';
  22. }
  23. else
  24. {
  25.  
  26.  
  27.  
  28. }
  29. $dir->close();
  30.  
  31.  
  32. ?>


Przed użyciem tego IF'a "co ma dzielić" wyświetlało mi wszystkie zdjęcia.. po tym nie chce ani jednego...
Coś źle robię, ale nie mogę dojść do tego i pomieszałem już wszystko w swojej głowie....

peter13135
może w folderze nie masz 9 fotek ? ;]
Reiven
mam 12 zdjęć
nospor
1) Użyj bazy danych. Własnie dlatego ze będzie dużo plików użyj bazy danych. Zdjęcia przechowuj oczuwiście na dysku, ale informacje o nich w bazie danych

Co do kodu co pokazałeś to sieczka jakaś...
2)
nie: while()
a: while(){
//tu kod co ma być w pętli
}
3)
$ilosc = count(glob($kat."*.*"));
czyli w petli za każdym razem liczysz liczbę plików... nie możesz tego policzyć raz przed pętlą?
Reiven
Ok, a jak w PHP i MySQL wykonać taką paginacje?
nospor
Paginacja/stronicowanie jest tak często poruszana na forum jak i na internecie, że aż wstyd pytać.... poszukaj.
Nawet u nas na forum masz dział ze skryptami/klasami paginacji. U mnie w podpisie też masz klasę do tego.
Reiven
wiem, korzystam z niej często. Tylko nie wiem jak to połączyć z Ajaxem...
nospor
Jeśli korzystasz z mojej klasy jak twierdzisz, to w paczce masz przykłady jak jej używać z ajaxem.
Reiven
Mam coś takiego:

  1. $foty = new db();
  2. $foty->count_query('zdjecia');
  3. $row = $foty->fetch_array();
  4. $recordsCount = $row[0];
  5. try{
  6. $pager = new Pager('1','?page=logi&pp1=#PAGE#');
  7. $pager->SetTotalRecords($recordsCount);
  8. $pager->SetRecordsPerPage(9);
  9. $pager->Make(true);
  10. $pag = $pager->Render();
  11. $start = $pager->GetIndexRecordStart();
  12. $end = $pager->GetIndexRecordEnd();
  13. }
  14. catch (Exception $e) {
  15. echo $e->getMessage();
  16. }
  17. $foty->query('zdjecia','Order by id DESC limit '.$start.','.($end - $start + 1).'');
  18. echo'<div class="item"><ul>';
  19. while($wynik=$foty->fetch_array())
  20. {
  21.  
  22. echo'<li><a href="'.$wynik['url'].'" rel="example1" title=""><img src="'.$wynik['url_th'].'" alt="#" /></a></li>';
  23.  
  24. }
  25. echo'</ul></div>';
  26.  
  27. $foty->close();

Wyświetla ładnie 9 fotek.
Na stronie wygląda to mniej więcej tak:



na dole są dwie strzałki. Muszę je podczepić w klasie? w sekcji od linków?
Używam do tego jquery.bxslider.js i nie definiuję tych strzałek w dokumencie... nie wiem jak to ugryźć...


@nospor, zrobiłem tak jak w Twoim skrypcie, tyle że pobiera mi zawartość całej strony...


  1. <script type="text/javascript" src="scripts/Mixed.js"></script>
  2. <script type="text/javascript" src="scripts/ActionsManager.js"></script>
  3. <script type="text/javascript" src="scripts/plugins/ActionsManager_advAjax.js"></script>
  4. <script type="text/javascript">
  5. ActionsManager.loadPlugins('dynamic, position');
  6. </script>
  7. <script type="text/javascript" src="scripts/advajax.js"></script>
  8. <script type="text/javascript">
  9. AjaxAction.prototype.oldAfterRun = AjaxAction.prototype.afterRun;
  10. AjaxAction.prototype.afterRun = function(ajaxObj,params, resultOk){
  11. //i zamykamy okno
  12. ActionsManager.hide(this);
  13. this.oldAfterRun(ajaxObj, params, resultOk); //wywołanie starej metody by zachować jej funkcje
  14. //wpisujemy nowe dane
  15. document.getElementById('mainDiv').innerHTML = ajaxObj.responseText;
  16. }
  17.  
  18. function loadPage(page){
  19. ActionsManager.setup({
  20. 'guid' : 'pager',
  21. 'link' : 'galeria.php?onlyData=1&page='+page,
  22. 'titleRunning': 'Pobieranie strony...',
  23. 'center' : false,
  24. 'type' : 'html'
  25. });
  26. }
  27. </script>
  28.  
  29.  
  30. class PagerE extends Pager {
  31.  
  32. protected function toString() {
  33.  
  34. if ($this->totalRecords <= $this->RecordsPerPage)
  35. return '';
  36. $_str = '';
  37. $sep = '  ';
  38. if (isset($this->array[self::GOTO_FIRST]))
  39. $_str .= $this->createHTMLLink('Pierwsza strona', $this->array[self::GOTO_FIRST][self::LINK], '|<',1).$sep;
  40. if (isset($this->array[self::GOTO_PREV_X]))
  41. $_str .= $this->createHTMLLink($this->array[self::PAGES_PER_NAV].' stron(y) do tyłu', $this->array[self::GOTO_PREV_X][self::LINK], '<<',$this->array[self::GOTO_PREV_X][self::PAGE]).$sep;
  42. if (isset($this->array[self::GOTO_PREV]))
  43. $_str .= $this->createHTMLLink('Poprzednia strona', $this->array[self::GOTO_PREV][self::LINK], '<',$this->array[self::GOTO_PREV][self::PAGE]).$sep;
  44.  
  45. foreach ($this->array[self::PAGES] as $_page => $_pageLink){
  46. if (!$_pageLink)
  47. $_str .= '<span>'.$_page.'</span>';
  48. else
  49. $_str .= $this->createHTMLLink("Strona ".$_page, $_pageLink, $_page, $_page);
  50. $_str .= $sep;
  51. }
  52.  
  53. if (isset($this->array[self::GOTO_NEXT]))
  54. $_str .= $sep.$this->createHTMLLink('Następna strona', $this->array[self::GOTO_NEXT][self::LINK], '>', $this->array[self::GOTO_NEXT][self::PAGE]);
  55. if (isset($this->array[self::GOTO_NEXT_X]))
  56. $_str .= $sep.$this->createHTMLLink($this->array[self::PAGES_PER_NAV].' stron(y) do przodu', $this->array[self::GOTO_NEXT_X][self::LINK], '>>',$this->array[self::GOTO_NEXT_X][self::PAGE]);
  57. if (isset($this->array[self::GOTO_LAST]))
  58. $_str .= $sep.$this->createHTMLLink('Ostatnia strona', $this->array[self::GOTO_LAST][self::LINK], '>|',$this->array[self::GOTO_LAST][self::PAGE]);
  59.  
  60. return $_str;
  61. }
  62.  
  63. protected function createHTMLLink($title, $link, $text,$page) {
  64. return '<a title="'.$title.'" href="'.$link.'" onclick="loadPage('.$page.');return false;">'.$text.'</a>';
  65. }
  66. }
  67.  
  68.  
  69. global $d;
  70. if($_GET['d'] == "zwierzeta")
  71. {
  72.  
  73.  
  74.  
  75. $foty = new db();
  76. $foty->count_query('zdjecia');
  77. $row = $foty->fetch_array();
  78. $totalRecords = $row[0];
  79. try {
  80. $pager = new PagerE('1');
  81. $pager->SetTotalRecords($totalRecords);
  82. $pager->SetRecordsPerPage(9);
  83. $pager->SetPagesPerNav(2);
  84. $pager->Make(true);
  85. $pag = $pager->Render();
  86. $indexStart = $pager->GetIndexRecordStart();
  87. $indexEnd = $pager->GetIndexRecordEnd();
  88. }
  89. catch (Exception $e) {
  90. echo $e->getMessage();
  91. }
  92.  
  93. $foty->query('zdjecia','Order by id DESC limit '.$start.','.($end - $start + 1).'');
  94. echo '<div id="mainDiv">';
  95. while($wynik=$foty->fetch_array())
  96. {
  97.  
  98. echo'<li><a href="'.$wynik['url'].'" rel="example1" title=""><img src="'.$wynik['url_th'].'" alt="#" /></a></li>';
  99.  
  100. }
  101. echo'</div>';
  102.  
  103. echo $pag;
  104. $foty->close();
  105.  
  106.  
  107. }


i dodatkowo:

  1. Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\WebServ\httpd\adami\core\db.class.php on line 152
nospor
Cytat
@nospor, zrobiłem tak jak w Twoim skrypcie, tyle że pobiera mi zawartość całej strony...
Bo twój kod niezależnie czy to ajax czy nie to zwraca całą stronę. Mój kod za pierwszym razem tylko zwraca całą stronę. Potem gdy jest ajax, to zwraca tylko dane. Przyjrzyj się w moim kodzie parametrowi "onlyData"

Co do błędy to gdzieś przekazujesz jakieś lewe zapytanie i Twoja klasa się na nim wykłada.
Reiven
czyli muszę wstawić :
  1. if (empty($_GET['onlyData']))


Lecz po wstawieniu tego jest tak jak poprzednio,
Jak zmieniłem warunek na
  1. if (($_GET['onlyData']))

to nie przechodzi na następne podstrony...

Ok dotarłem już do tego, dzięki za naprowadzenie.
Wszystko już działa, prawie.. smile.gif

Otóż mam plik galeria.php gdzie z mysql pobieram dane kategorie i dane foty do nich.
W skrypcie muszę definiować z góry gdzie ma to działać...
  1. function loadPage(page){
  2. ActionsManager.setup({
  3. 'guid' : 'pager',
  4. 'link' : 'gallery.php?d=zwierzeta&onlyData=1&page='+page,
  5. 'titleRunning': 'Pobieranie strony...',
  6. 'center' : true,
  7. 'type' : 'html'
  8. });
  9. }

Dokładnie chodzi mi o link, działa to w przypadku działu zwierzęta, lecz w innych już nie będzie działać... Można to jakoś obejść?
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.