Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przepisywanie kodu do MVC
Forum PHP.pl > Forum > PHP
walus16
Witam, napisałem kiedyś aplikację w PHP strukturalnym i aby ją unowocześnić i rozbudować postanowiłem zacząć przepisywać ją do MVC. Wszystko szło fajnie aż do momentu, w którym natrafiłem na pewien problem. W starym kodzie w pętli "while" zrobiony co drugi wiersz tabeli innym kolorem ($cell_color). Po przepisaniu tego do "foreach" osiągnąłem kolorowanie co drugiej komórki a nie wiersza. Proszę o pomoc.

Stary kod:
  1. $result = mysql_query("SELECT * FROM ".DB_PREFIX."studios ORDER BY studio_name");
  2. if (mysql_num_rows($result) != 0){
  3. $i = 0;
  4. echo "<td class='tbl-header'>Nazwa</td>\n";
  5. echo "<td class='tbl-header'>Opis</td>\n";
  6. echo "<td class='tbl-header'>Opcje</td>\n";
  7. echo "</tr>\n";
  8. while ($data = mysql_fetch_assoc($result)){
  9. $cell_color = ($i % 2 == 0 ? "tbl1" : "tbl2");
  10. echo "<tr>\n";
  11. echo "<td class='$cell_color'>".$data['studio_name']."\n</td>\n";
  12. echo "<td class='$cell_color'>".$data['studio_desc']."\n</td>\n";
  13. echo "<td class='$cell_color'>".$data['studio_id']."\n</td>\n";
  14. echo "</tr>\n";
  15. $i++;
  16. }
  17. echo "</table>\n";
  18. } else {
  19. echo "<tr><td align='center' class='tbl1'>Brak studiów.</td></tr>\n</table>\n";
  20. }

Nowy kod:
  1. $result = mysql_query('SELECT * FROM mb_studios ORDER BY studio_name');
  2. $posts = array();
  3. while ($row = mysql_fetch_assoc($result)){
  4. $posts[] = $row;
  5. }
  6.  
  7. ?>
  8.  
  9. <?php if ($posts): ?>
  10. <table width="100%">
  11. <tr>
  12. <td class="tbl-header">Nazwa</td>
  13. <td class="tbl-header">Opis</td>
  14. <td class="tbl-header">Opcje</td>
  15. </tr>
  16. <?php foreach ($posts as $post): ?>
  17. <tr>
  18. <td class=""><?php echo $post['studio_name'] ?></td>
  19. <td class=""><?php echo $post['studio_desc'] ?></td>
  20. <td class=""><?php echo $post['studio_id'] ?></td>
  21. </tr>
  22. <?php endforeach; ?>
  23. </table>
  24. <?php else: ?>
  25. Testowy komunikat
  26. <?php endif ?>
SmokAnalog
A nie lepiej kolorować w CSS? http://www.w3schools.com/cssref/sel_nth-child.asp

P.S. Plus dla Ciebie za używanie składni alternatywnej i nie wypluwanie HTML-a w echo!
Turson
Dlaczego nie użyjesz po prostu while i będzie identycznie jak wcześniej? While() też ma przyjazną formę
  1. <?php while(): ?>
  2. html
  3. <?php endwhile; ?>
walus16
Dzięki, nie słyszałem o to takim rozwiązaniu muszę się temu bliżej przyjrzeć. smile.gif Jest jeszcze jakieś rozwiązanie i idąc bardziej w stronę PHP.
Cytat(SmokAnalog @ 3.07.2014, 20:05:31 ) *
A nie lepiej kolorować w CSS? http://www.w3schools.com/cssref/sel_nth-child.asp

P.S. Plus dla Ciebie za używanie składni alternatywnej i nie wypluwanie HTML-a w echo!
SmokAnalog
Jak coś da się zrobić w CSS, to lepiej w CSS. Ale zanim pojawiło się nth-child w CSS, to ja to robiłem tak:
  1. for ($even = true; warunek; $even = !$even) {...}


I potem przypisywałem klasę na podstawie zmiennej $even (true to parzysty wiersz, a false to nieparzysty).
walus16
@Turson, z "while" to w taki sposób mi to nie działa.
Cytat(Turson @ 3.07.2014, 20:09:49 ) *
Dlaczego nie użyjesz po prostu while i będzie identycznie jak wcześniej? While() też ma przyjazną formę
  1. <?php while(): ?>
  2. html
  3. <?php endwhile; ?>

Turson
  1. <?php while ($post = mysql_fetch_assoc($result)): ?>
  2. <tr>
  3. <td class=""><?php echo $post['studio_name'] ?></td>
  4. <td class=""><?php echo $post['studio_desc'] ?></td>
  5. <td class=""><?php echo $post['studio_id'] ?></td>
  6. </tr>
  7. <?php endwhile; ?>
walus16
Mój zamysł jest taki, że logikę aplikacji będę trzymał w katalogu model a widoki html w katalogu view więc takie rozwiązanie z while ($post = mysql_fetch_assoc($result)) odpada sad.gif
SmokAnalog
Ale w czym problem? To użyj foreach tak jak masz teraz i wywal te klasy, tak jak Ci podpowiedziałem. Kod będzie czystszy i nowocześniejszy.
walus16
Dokładnie tak zrobię. Pozostanę przy foreach i dodam rozwiązanie z CSS.
Turson
Cytat(walus16 @ 3.07.2014, 20:47:28 ) *
Mój zamysł jest taki, że logikę aplikacji będę trzymał w katalogu model a widoki html w katalogu view więc takie rozwiązanie z while ($post = mysql_fetch_assoc($result)) odpada sad.gif

Więc co robi to w "nowym kodzie"
  1. $result = mysql_query('SELECT * FROM mb_studios ORDER BY studio_name');
  2. $posts = array();
  3. while ($row = mysql_fetch_assoc($result)){
  4. $posts[] = $row;
  5. }
walus16
Ten kod jest dlatego żeby było widać różnicę między starym, a nowym. No i dlatego, że nie mam jeszcze napisanego kontrolera. Sorry za zamęt.
Cytat(Turson @ 3.07.2014, 21:24:25 ) *
Więc co robi to w "nowym kodzie"
  1. $result = mysql_query('SELECT * FROM mb_studios ORDER BY studio_name');
  2. $posts = array();
  3. while ($row = mysql_fetch_assoc($result)){
  4. $posts[] = $row;
  5. }

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.