Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [help]system portfolio
Forum PHP.pl > Forum > PHP
colinQ
plik portfolio.php
  1. <script language=javascript>
  2.  function otworz(nazwa){
  3.  oknoObrazki=window.open(nazwa, 'oknoObr', 'width=640,height=480')
  4.  oknoObrazki.focus()
  5.  }
  6. </script>
  7. <?
  8. $szukaj = mysql_query("select * from portfolio");
  9. $ile = mysql_num_rows($szukaj);
  10. ?>
  11. <br><font face="Arial Black" style="font-size: 20px"><center>Portfolio</center></font><br><br>
  12.  
  13. <?
  14. for($i=1; $i <= $ile; $i++) {
  15. $praca = mysql_fetch_assoc($szukaj);
  16. ?>
  17.  
  18. <table width="400" align="center">
  19. <tbody>
  20. <tr>
  21. <td style="border: 1px solid rgb(221, 221, 221); padding: 5px; color: rgb(255, 102, 0); font-size: 10px;" colspan="2">
  22. <b><? echo $praca['klient']; ?></b>
  23. </td>
  24. </tr>
  25. <tr valign="top">
  26. <td style="padding: 5px; width: 150px;">
  27. <center>
  28. <img alt="" src="prace/<? echo $praca['screen']; ?>" width=130/>
  29. </td>
  30. <td style="padding: 5px; width: 250px; font-size: 10px; color: white;">
  31. <? echo $praca['opis']; ?>
  32. <br/>
  33. <br/>
  34. Wykorzystane technologie: <? echo $praca['technologie']; ?><br>
  35. <?
  36. if($praca['url'] !== "")
  37. echo '<a href='.$praca['url'].'><font color=orange>online</font></a>';
  38. ?>
  39. </td>
  40. </tr>
  41. <tbody>
  42. </table>
  43.  
  44. <?
  45. } ?>


I jak zrobić aby:

Gdy jest więcej niż 3 prace
wyświetlało tylko te 3
a na dole pokazało się
-1-2-3-4-
i żeby te kolejne były na kolejnych podstronach??
Moli
Poszukaj na forum klasy nospora - navigator.
Babcia@Stefa
Witam, widzę że tu chodzi o stronicowanie (podział wyników na strony) - też kiedyś miałem z tym problem laugh.gif

Za chwilę dam kod na forum.

@edit
Kod
<?php
// tworzymy tablicę z danymi (48 rekordów)
for ($i=0; $i<48; $i++)
$dane[] = $i;
// ustawienia
$danych = 48; // określamy ile mamy danych, możemy to też zrobić w sposób automatyczny, przykład dla tablic: $danych = count($dane);
$nastronie = 10; // ile ma być wyświetlanych wyników na jednej stronie
$stron = round($danych/$nastronie); // ile razy mieści się wartość zmiennej $nastronie w ilości danych ($danych:$nastronie)
$od = 0; // tutaj licznik startowy (od rekordu do rekordu) , jeśli wyniki się nie zmieniają to zmień jego wartość na -$nastronie
$do = 0; // licznik końcowy (od rekordu do rekordu)
$petla = -1;
while ($petla < $stron) // przypisujemy dla danej strony dane wyniki..
{
$petla++;
$od += $nastronie;
$do = $od + $nastronie;
if($petla == $_GET['page'])
break;
}

while ($wyswietl < $danych) // wyświetlanie wyników
{
$wyswietl++;
if($wyswietl < $do AND $wyswietl > $od OR $wyswietl == $od)
echo '<br>$dane[' .$wyswietl. '] = \'' .$dane[$wyswietl]. '\';';
}

for ($i=1; $i<$stron; $i++)
{
$ii = $i-1;
if($_GET['page'] == $ii)
$strony .= '[<b>' .$i. '</b>]';
else
$strony .= '[<a href="?page=' .$ii. '">' .$i. '</a>]';
}
echo '<br><br>' .$strony;
?>


Jak by coś nie poprawnie działało to na pw pisz.

Dziękuję, Babcia@Stefa
colinQ
Tak troszke nic nie kumam z tego twojego skryptu :/

Dostosowałbyś mi go do tego co podałem w 1 poście.

PLEASE...
in5ane
Ja ci zaraz pokaże mój kod i jest łatwiejszy w użyciu (dane są sortowane z bazy danych):

  1. <? 
  2.  $def_ilosca = 10; // ilosc ogloszen na strone
  3.  $oda = $def_ilosca * $stronaa;
  4.  $ilosca = $def_ilosca; 
  5.  
  6.  $query = "SELECT * FROM twoja_tabelka ORDER BY id ASC LIMIT $oda,$ilosca"; // <-- tutaj nazwa twojej tabeli
  7.  $result = mysql_query($query);
  8.  
  9.  if(mysql_num_rows($result) == 0) { 
  10.  echo '<font face="Tahoma" size="1">Nie ma żadnych ogłoszeń</font>'; 
  11.  } 
  12.  else { 
  13.  while($row = mysql_fetch_assoc($result)) { 
  14.  
  15.  echo 'TUTAJ TABELKA CZY CUS I WYCIAGNIETE DANE'; // <--- tu patrz, tu patrz, tu patrz, tu patrz, tu patrz
  16.  
  17.  echo '<br><br><font face="Tahoma" size="1"><b>Strony z ogłoszeniami:</b></font><br>';
  18.  
  19.  if($stronaa > 0) 
  20.  echo "<font face=Verdana size=1><a href='?stronaa=".($_GET[stronaa] - 1)."'> &lt;&lt;&lt;</a> </font>"; 
  21.  
  22.  $query = "SELECT * FROM twoja_tabelka"; // <-- tutaj nazwa twojej tabeli
  23.  $result = mysql_query($query); 
  24.  $num = mysql_num_rows($result); 
  25.  
  26.  $doa = $num / $def_ilosca; 
  27.  
  28.  $ll = strpos(".",$doa); 
  29.  if($ll > 0) $do = substr($doa,0,$ll); 
  30.  
  31.  for($i = 0; $i < $doa; $i++) { 
  32.  if($i != $stronaa) 
  33.  echo "<font face=Verdana size=1><a href='?stronaa=$i'><b>".($i+1)."</b></a> </font>"; 
  34.  else echo "<b><u>".($i+1)."</u></b> "; 
  35.  } 
  36.  
  37.  if($stronaa < $doa - 1)
  38.  echo "<font face=Verdana size=1><a href='?stronaa=".($_GET[stronaa] + 1)."'>&gt;&gt;&gt;</a> </font>"; 
  39.  } 
  40.  ?>
colinQ
a bym prosił o dostosowanie bo ja się nie łapie w czyiś skryptach :/

Bardzo byłbym wdzięczny...
Hazel
To radziłbym zacząć się łapać, bo ludzie się starają, a Ty nawet nie próbujesz pomyśleć...
To nie jest nic trudnego, wystarczy się trochę wysilić, a nie zwalać na innych całą robotę i czekać na gotowe...
Skopiuj se kod do edytora i analizuj, u mnie na przykład działa jak najbardziej poprawnie i mam to, o co Ci chodziło. Problem osobiście uważam za rozwiązany. dry.gif
skowron-line
No to moze napiszemy tobie jaka jest istota stronicowania skoro nie mozesz wydumac tego z innych skryptow i przerobic swoj albo napisac od poczatku
colinQ
Próbuje pomyśleć... dry.gif

Ale z tego nic nie kumam...

Wszystko co sam piszę to potrafię rozpracować a jak ktoś pisze to nie za bardzo ...

A jak się starają to niech się starają komuś pomóc a nie walnąć swój skrypt i powiedzieć że on działa bo tak to ja też umiem.
Hazel
Ale jaki masz problem?
Skrypt działa, i jest w dodatku niespecjalnie rozbudowany...
Co mamy Ci wytłumaczyć? blinksmiley.gif
kubarek
ja to robię w ten sposób
stronicowanie zaczynasz od początku, najpierw od określenia ilości wierszy, danych na stronę:
  1. <?php
  2. $per_page = 10;
  3. ?>

dalej, pobierasz dane z bazy danych i liczysz ich ilość
  1. <?php
  2. $data = get_data(); // get_data to przykładowa funkcja, używasz normalnie swojego sposobu
  3. $data_count = count($data);
  4. ?>

w zmiennej $data zachowane są wszystkie wiersze pobrane z bazy danych i są w postaci tablicy, dzięki czemu łatwo zapisać ich ilość do zmiennej $data_count
następnie obliczasz ilość wszystkich stron, wzorek prosty - ilość wszystkich danych podzielona przez ilość danych na stronę
  1. <?php
  2. $all = ceil( $data_count / $per_page );
  3. ?>

masz już potrzebne dane, teraz wyświetlanie strony o odpowiednim numerze
  1. <?php
  2. $nr = 2; // dajmy na to stronę drugą
  3. $start = (int)( $nr * $per_page);
  4. $end = $start + $per_page
  5. ?>

numer wiersza początkowego to iloczyn konkretnego numeru strony i ilości wierszy na stronę, przykładowo: dla strony 2 i ilości wierszy na stronę 10, zaczynasz od wiersza z numerkiem 20 ( 2*10 ), dla strony 3 od wiersza z numerem 30, itd.
wiersz końcowy to suma wiersza startowego i ilości wierszy na stronę, wyżej podałem dlaczego
i wyświetlasz dane
  1. <?php
  2. for ($i = 0; $i < $data_count; $i++){
  3. if ($i >= $start && $i < $end) wyswietl_wiersz($data, $i); // znowu przykładowa funkcja i dobry sposób na oddzielenie logiki od wyglądu
  4. }
  5. /* funkcja wyswietl_wiersz moze wygladać np. tak:
  6. function wyswietl_wiersz($data, $nr){
  7.  echo $data[$nr]['tytul'].'<br />'.$data[$nr]['screen'];
  8. }
  9. */
  10. ?>

a jak zrobić panel z numerkami stron ? też prosto, wystarczy jedna iteracja
  1. <?php
  2. for ($j = 0; $j < $all; $j++){
  3. if ($nr == $j) // jeśli zmienna $j będzie równa aktualnie przeglądanemu nr strony ...
  4. wyswietl_numer_strony_bez_linka($j); //funkcja która wyświetli numer strony
  5. else
  6.  wyswietl_numer_strony($j);
  7. }
  8. ?>

to jest tylko jeden ze sposobów na to, ale mam nadzieję że coś wyjaśniłem ;-)
DenVer89
kubarek - twój kod jak pokazuje numeracje questionmark.gif np. << < 1, 2, 3, 4, 5 > >>
in5ane - twój kod jak pokazuje numeracje questionmark.gif np. << < 1, 2, 3, 4, 5 > >>

ja bym chciał aby pokazywało:
<< <1,2,3,4,5,6,7,8,9,10...> >>
<< <...10,11,12,13,14,15,16,17,18,19,20...> >>
itd. itd. i aby zawsze ta aktywna strona była na środku jeśli będzie dalej to pasek z pokazywanymi stronami się przesunie tez dalej az dobijemy do 50 strony winksmiley.jpg troche nie zrozumiale napisałem sorrka
matix
To za dużo pisania, nikt ci nie będzie tego robił, a jak zrobi, to stwierdzisz, że tego nie rozumiesz.
Ja ci polecam dwie niezawodne metody - google (kurs php, ćwiczenia php, itp) oraz książki (polecam z heliona coś z php5).

Jeśli jednak nie chcesz z tego skorzystać, to polecam ci gotowe klasy. Z tego co mi wiadomo, to Nospor napisał bardzo fajną i ciekawą klasę. Możesz ją sciągnąc stąd: >>klik<<.

Pozdro
barat
Cytat(DenVer89 @ 18.08.2007, 00:52:27 ) *
kubarek - twój kod jak pokazuje numeracje questionmark.gif np. << < 1, 2, 3, 4, 5 > >>
in5ane - twój kod jak pokazuje numeracje questionmark.gif np. << < 1, 2, 3, 4, 5 > >>

ja bym chciał aby pokazywało:
<< <1,2,3,4,5,6,7,8,9,10...> >>
<< <...10,11,12,13,14,15,16,17,18,19,20...> >>
itd. itd. i aby zawsze ta aktywna strona była na środku jeśli będzie dalej to pasek z pokazywanymi stronami się przesunie tez dalej az dobijemy do 50 strony winksmiley.jpg troche nie zrozumiale napisałem sorrka


Mój tak robi ... tylko jest trochę amatorski (dopiero zaczynam, ale piszę sam) ... przerobisz go sobie jak będziesz chciał smile.gif

http://forum.php.pl/index.php?showtopic=75273&hl=

Sama funkcja wymaga by podać ile będzie stron, jaka jest aktualna strona i opcjonalnie ile ma być cyferek (dafault 3 , bieząca i po jednej z każdej strony np << < 3 4 5 > >> )

Przykład działania na bwebi.com/bwebi.html (na razie same lipsumy bo to w fazie pisania wszystko jest... sie uparłem, że będzie autorskie wszystko, ale to nie ważne, linki są inne bo sobie funkcje przerobiłem na mod_rewrite)
colinQ
Ale jak pobrać wiersze do tablic??

Bo jak robie mysql_fetch_array to mi zapisuje komórki blinksmiley.gif
Cytat
Mój tak robi ... tylko jest trochę amatorski (dopiero zaczynam, ale piszę sam) ... przerobisz go sobie jak będziesz chciał smilingsmiley.gif

http://forum.php.pl/index.php?showtopic=75273&hl=


Ale wyświetla mi tylko:

* first
* prev
* 1
* 2
* next
* last

A nie pokazuje rekordów
Babcia@Stefa
Proszę oto kod, ale na przyszłość postaraj się sam więcej popracować, wiem kiedyś nawet jeszcze niedawno miałem z tym problem, ale pomyślałem i zobaczyłem jakie to banalne i sam zrobiłem wkońcu winksmiley.jpg
  1. <script language=javascript>
  2.  function otworz(nazwa){
  3.  oknoObrazki=window.open(nazwa, 'oknoObr', 'width=640,height=480')
  4.  oknoObrazki.focus()
  5.  }
  6. </script>
  7. <?
  8. $szukaj = mysql_query("select * from portfolio");
  9. $ile = mysql_num_rows($szukaj);
  10.  
  11. // konfiguracja
  12. $danych = $ile; // określamy ile mamy danych, możemy to też zrobić w sposób automatyczny, przykład
     dla tablic: $danych = count($dane);
  13. $nastronie = 10; // ile ma być wyświetlanych wyników na jednej stronie
  14. $stron = round($danych/$nastronie); // ile razy mieści się wartość zmiennej $nastronie w ilości danych ($danych:$nastronie)
  15. $od = 0; // tutaj licznik startowy (od rekordu do rekordu) , jeśli wyniki się nie zmieniają to zmień jego wartość na -$nastronie
  16. $do = 0; // licznik końcowy (od rekordu do rekordu)
  17. $petla = -1;
  18. // obliczanie ile stron będzie z wynikiami
  19. while ($petla < $stron) // przypisujemy dla danej strony dane wyniki..
  20. {
  21. $petla++;
  22. $od += $nastronie;
  23. $do = $od + $nastronie;
  24. if($petla == $_GET['page'])
  25. break;
  26. }
  27. ?>
  28. <br><font face="Arial Black" style="font-size: 20px"><center>Portfolio</center></font><br><br>
  29.  
  30. <?
  31. while ($wyswietl < $danych) // wyświetlanie wyników
  32. {
  33. $wyswietl++;
  34. if($wyswietl < $do AND $wyswietl > $od OR $wyswietl == $od)
  35. {
  36. $praca = mysql_fetch_assoc($szukaj);
  37. }
  38.  
  39. ?>
  40.  
  41. <table width="400" align="center">
  42. <tbody>
  43. <tr>
  44. <td style="border: 1px solid rgb(221, 221, 221); padding: 5px; color: rgb(255, 102, 0); font-size: 10px;" colspan="2">
  45. <b><? echo $praca['klient']; ?></b>
  46. </td>
  47. </tr>
  48. <tr valign="top">
  49. <td style="padding: 5px; width: 150px;">
  50. <center>
  51. <img alt="" src="prace/<? echo $praca['screen']; ?>" width=130/>
  52. </td>
  53. <td style="padding: 5px; width: 250px; font-size: 10px; color: white;">
  54. <? echo $praca['opis']; ?>
  55. <br/>
  56. <br/>
  57. Wykorzystane technologie: <? echo $praca['technologie']; ?><br>
  58. <?
  59. if($praca['url'] !== "")
  60. echo '<a href='.$praca['url'].'><font color=orange>online</font></a>';
  61. ?>
  62. </td>
  63. </tr>
  64. <tbody>
  65. </table>
  66.  
  67. <?
  68. } 
  69. for ($i=1; $i<$stron; $i++)
  70. {
  71. $ii = $i-1;
  72. if($_GET['page'] == $ii)
  73. $strony .= '[<b>' .$i. '</b>]';
  74. else
  75. $strony .= '[<a href="?page=' .$ii. '">' .$i. '</a>]';
  76. }
  77. echo '<br><br>' .$strony;
  78. ?>


Dziękuję, Babcia@Stefa
colinQ
Do BabciaStefa

przy konfiguracji:

  1. <?php
  2. $danych = $ile; // określamy ile mamy danych, możemy to też zrobić w sposób automatyczny, przykład dla tablic: $danych = count($dane);
  3. $nastronie = 3; // ile ma być wyświetlanych wyników na jednej stronie
  4. $stron = round($danych/$nastronie); // ile razy mieści się wartość zmiennej $nastronie w ilości danych ($danych:$nastronie)
  5. $od = 0; // tutaj licznik startowy (od rekordu do rekordu) , jeśli wyniki się nie zmieniają to zmień jego wartość na -$nastronie
  6. $do = 0; // licznik końcowy (od rekordu do rekordu)
  7. $petla = -1;
  8. ?>


wyświetla mi 2 rekordy puste i 2 z bazy ale nie pokazuje 2 pozostałych i nie wyswietla się [1][2] :/
a powinno te 2 nastepne pokazac na stronie [2]

przykładowy wygląd strony[1]:
1.
2.
3. praca 1
4. praca 2

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

przy konfiguracji:

  1. <?php
  2. $danych = $ile; // określamy ile mamy danych, możemy to też zrobić w sposób automatyczny, przykład dla tablic: $danych = count($dane);
  3. $nastronie = 1; // ile ma być wyświetlanych wyników na jednej stronie
  4. $stron = round($danych/$nastronie); // ile razy mieści się wartość zmiennej $nastronie w ilości danych ($danych:$nastronie)
  5. $od = 0; // tutaj licznik startowy (od rekordu do rekordu) , jeśli wyniki się nie zmieniają to zmień jego wartość na -$nastronie
  6. $do = 0; // licznik końcowy (od rekordu do rekordu)
  7. $petla = -1;
  8. ?>


wyswietla mi 4 razy 1 rekord na jednej stronie
na dole pokazuje się [1][2][3]

na stronie [2] wygląda to tak:
1 rekord pusty i 3 razy rekord 1

na stronie [3] wygląda to tak:
2 rekordy puste i 2 razy rekord 1

przykładowy wygląd strony[1]:
1. praca 1
2. praca 1
3. praca 1
4. praca 1

przykładowy wygląd strony[2]:
1.
2. praca 1
3. praca 1
4. praca 1

przykładowy wygląd strony[3]:
1.
2.
3. praca 1
4. praca 1


Czyli że przy każdej stronie zamienia 1 rekord na pusty

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

przy konfiguracji:

  1. <?php
  2. $danych = $ile; // określamy ile mamy danych, możemy to też zrobić w sposób automatyczny, przykład dla tablic: $danych = count($dane);
  3. $nastronie = 3; // ile ma być wyświetlanych wyników na jednej stronie
  4. $stron = round($danych/$nastronie); // ile razy mieści się wartość zmiennej $nastronie w ilości danych ($danych:$nastronie)
  5. $od = - $nastronie; // tutaj licznik startowy (od rekordu do rekordu) , jeśli wyniki się nie zmieniają to zmień jego wartość na -$nastronie
  6. $do = 0; // licznik końcowy (od rekordu do rekordu)
  7. $petla = -1;
  8. ?>


wyświetla 1 raz rekord 1
i 3 razy rekord 2 (nie wyswietla [1][2] )

przykładowy wygląd strony:
1. praca 1
2. praca 2
3. praca 2
4. praca 2

------------------------------------------------------------------------------------------------------------------------------------------------
Babcia@Stefa
Niestety jest kilka błędów w tym kodzie (nigdy go nie poprawiałem na dysku - tylko odrazu na jakimś forum itp. ;d)


  1. <?php
  2. $danych = $ile; // określamy ile mamy danych, możemy to też zrobić w sposób automatyczny, przykład
     dla tablic: $danych = count($dane);
  3. $nastronie = 1; // ile ma być wyświetlanych wyników na jednej stronie
  4. $stron = $danych/$nastronie; // ile razy mieści się wartość zmiennej $nastronie w ilości danych ($danych:$nastronie)
  5. $od = $-nastronie; // tutaj licznik startowy (od rekordu do rekordu) , jeśli wyniki się nie zmieniają to zmień jego wartość na -$nastronie
  6. $do = 0; // licznik końcowy (od rekordu do rekordu)
  7. $petla = -1;
  8. ?>


Ok, teraz będzie działało ;]

Dziękuję, Babdcia@Stefa
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.