Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Galeria zdjęć, paginacja
Reiven
post
Post #1





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 17.03.2006

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


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....

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
peter13135
post
Post #2





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


może w folderze nie masz 9 fotek ? ;]


--------------------
:)
Go to the top of the page
+Quote Post
Reiven
post
Post #3





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 17.03.2006

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


mam 12 zdjęć
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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ą?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Reiven
post
Post #5





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 17.03.2006

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


Ok, a jak w PHP i MySQL wykonać taką paginacje?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Reiven
post
Post #7





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 17.03.2006

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


wiem, korzystam z niej często. Tylko nie wiem jak to połączyć z Ajaxem...
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jeśli korzystasz z mojej klasy jak twierdzisz, to w paczce masz przykłady jak jej używać z ajaxem.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Reiven
post
Post #9





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 17.03.2006

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


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


Ten post edytował Reiven 20.07.2011, 22:08:18
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Reiven
post
Post #11





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 17.03.2006

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


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ść?
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 07:45