Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][MySQL][PHP]Elementy tr/td w pętli
martinii007
post 2.04.2014, 10:02:49
Post #1





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 15.12.2011

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


Otóż mam następujący problem:

Chciałbym aby menu nad któym pracuję miało wygląd tabeli: i na przemian wiersze mają się zmieniać, raz czarny, raz biały.

  1.  
  2. <tr class="odd">
  3. <td>
  4. <span>Lobster Rolls with house made old bay potato chips</span>
  5. <p class="lang1">Lobster Rolls with house made old bay potato chips</p>
  6. <p class="lang2">Lobster Rolls with house made old bay potato chips</p>
  7. </td>
  8. <td class="price">$12.79</td>
  9. </tr>
  10. <tr>
  11. <td>
  12. <span>Lobster Rolls with house made old bay potato chips</span>
  13. <p class="lang1">Lobster Rolls with house made old bay potato chips</p>
  14. <p class="lang2">Lobster Rolls with house made old bay potato chips</p>
  15. </td>
  16. <td class="price">$12.79</td>
  17. </tr>
  18. <tr class="odd">
  19. <td>
  20. <span>Lobster Rolls with house made old bay potato chips</span>
  21. <p class="lang1">Lobster Rolls with house made old bay potato chips</p>
  22. <p class="lang2">Lobster Rolls with house made old bay potato chips</p>
  23. </td>
  24. <td class="price">$12.79</td>
  25. </tr>
  26. <tr>
  27. <td>
  28. <span>Lobster Rolls with house made old bay potato chips</span>
  29. <p class="lang1">Lobster Rolls with house made old bay potato chips</p>
  30. <p class="lang2">Lobster Rolls with house made old bay potato chips</p>
  31. </td>
  32. <td class="price">$12.79</td>
  33. </tr>
  34.  






  1. $menu = DatabaseManager::selectBySQL("SELECT * FROM Menu where id>=0 and id<=10"); //10 dań
  2. foreach($menu as $pozycje_menu) {
  3.  
  4. for($id=$pozycje_menu['id']; $id < 9; ++$id)
  5. {
  6.  
  7. $odd= "class=\"odd\"";
  8. $empty="";
  9.  
  10. echo '<tr '.($id & 1 ? $odd : $empty).'>';
  11.  
  12. <td>
  13. <span>'.$pozycje_menu['danie_1'].'</span>
  14. <p class="lang1">'.$pozycje_menu['opis_dania_1'].'</p>
  15. <p class="lang2">'.$pozycje_menu['opis_dania_2'].'</p>
  16. </td>
  17. <td class="price">'.$pozycje_menu['cena'].'</td>
  18. </tr>
  19. ';}}



Wszystko wyświetla się OK tylko, że są powielone rekordy. Potrzebuję jedynie "zlikwidować" te powtarzające się elementy, bo reszta wyświetla się prawidłowo.

Ten post edytował martinii007 2.04.2014, 10:05:11
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
b4rt3kk
post 2.04.2014, 10:11:16
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Jeśli to możliwe, to proponuję zrezygnować z klas even, odd, a użyć zwyczajnie w tym celu css, czyli:

  1. tr:nth-child(even) {background: #CCC}
  2. tr:nth-child(odd) {background: #FFF}


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
martinii007
post 2.04.2014, 10:25:16
Post #3





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 15.12.2011

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


No piękne rozwiązanie smile.gif

A można to jakoś skrócić?

Zrealizowałem to w taki sposób:

  1. tr.odd:nth-child(1) {background-color: transparent}
  2. tr.odd:nth-child(2) {background: #FFF}
  3. tr.odd:nth-child(3) {background-color: transparent}
  4. tr.odd:nth-child(4) {background: #FFF}
  5. tr.odd:nth-child(5) {background-color: transparent}
  6. tr.odd:nth-child(6) {background: #FFF}
  7. tr.odd:nth-child(7) {background-color: transparent}
  8. tr.odd:nth-child(8) {background: #FFF}
  9. tr.odd:nth-child(9) {background-color: transparent}
  10. tr.odd:nth-child(10) {background: #FFF}
  11. tr.odd:nth-child(11) {background-color: transparent}
  12. tr.odd:nth-child(12) {background: #FFF}



P.S.

Jakby ktoś miał rozwiązanie w PHPie to również można podrzucić.
Go to the top of the page
+Quote Post
Sephirus
post 2.04.2014, 10:31:05
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Panie autor przecież b4rt3kk podał Ci właśnie skróconą wersję smile.gif

Co do powielania rekordów to nie do końca kumam. Jakto one się powielają?


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
martinii007
post 2.04.2014, 10:38:14
Post #5





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 15.12.2011

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


W ten sposób nie działa:

  1. tr.odd:nth-child(even) {background-color: transparent}
  2. tr.odd:nth-child(odd) {background: #FFF}


Powielają się w następujący sposób:

Np. wiersz z id=1 wyświetla się na stronie 8 razy, następny również itd. zamiast pojedynczo wszystkie pokolei od id1 do 10, jeżeli chodzi o CSS to Klasa CSS jest dodawana prawidłowo i jest wyświetlone wszystko na przemian.
Go to the top of the page
+Quote Post
b4rt3kk
post 2.04.2014, 10:42:11
Post #6





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(martinii007 @ 2.04.2014, 11:25:16 ) *
No piękne rozwiązanie smile.gif

A można to jakoś skrócić?

Zrealizowałem to w taki sposób:

  1. tr.odd:nth-child(1) {background-color: transparent}
  2. tr.odd:nth-child(2) {background: #FFF}
  3. tr.odd:nth-child(3) {background-color: transparent}
  4. tr.odd:nth-child(4) {background: #FFF}
  5. tr.odd:nth-child(5) {background-color: transparent}
  6. tr.odd:nth-child(6) {background: #FFF}
  7. tr.odd:nth-child(7) {background-color: transparent}
  8. tr.odd:nth-child(8) {background: #FFF}
  9. tr.odd:nth-child(9) {background-color: transparent}
  10. tr.odd:nth-child(10) {background: #FFF}
  11. tr.odd:nth-child(11) {background-color: transparent}
  12. tr.odd:nth-child(12) {background: #FFF}



P.S.

Jakby ktoś miał rozwiązanie w PHPie to również można podrzucić.


Powinno działać, bo even i odd to w css słowa kluczowe, ale tutaj masz wersję z indeksem wiersza, to samo, tyle że inaczej zapisane.

  1. tr:nth-child(2n+1) {background-color: transparent}
  2. tr:nth-child(2n) {background: #FFF}


Poza tym nie zauważyłeś że masz pętlę w pętli? Wszystko wykonuje się tak na oko jakieś 88 razy, w zależności ile masz tam rekordów.

Powinno to wyglądać z grubsza tak:

  1. $menu = DatabaseManager::selectBySQL("SELECT * FROM Menu where id>=0 and id<=10"); //10 dań
  2. echo '<table>';
  3. foreach($menu as $pozycje_menu) {
  4. echo'<tr>
  5. <td>
  6. <span>'.$pozycje_menu['danie_1'].'</span>
  7. <p class="lang1">'.$pozycje_menu['opis_dania_1'].'</p>
  8. <p class="lang2">'.$pozycje_menu['opis_dania_2'].'</p>
  9. </td>
  10. <td class="price">'.$pozycje_menu['cena'].'</td>
  11. </tr>
  12. ';
  13. }
  14. echo '</table>';


I css jak wyżej.

Ten post edytował b4rt3kk 2.04.2014, 10:48:01


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
trueblue
post 2.04.2014, 10:46:12
Post #7





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Wyrzuć tą pętle for w foreach, oprzyj tylko na jednej for. Odd i even oprzyj na zmiennej w tej pętli, a nie id pozycji menu.

  1. for($i=0;$i<count($menu);$i++){
  2. $odd=$i%2; //tu odd lub nie
  3. $menu[$i]['danie_1']; //w tej zmiennej będziesz mieć danie_1, analogicznie dla pozostałych
  4. }


Ten post edytował trueblue 2.04.2014, 10:46:48


--------------------
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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 20:45