Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przepisywanie kodu do MVC
walus16
post 3.07.2014, 18:59:10
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 24.05.2011

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


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


Ten post edytował walus16 3.07.2014, 19:02:32
Go to the top of the page
+Quote Post
SmokAnalog
post 3.07.2014, 19:05:31
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


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!
Go to the top of the page
+Quote Post
Turson
post 3.07.2014, 19:09:49
Post #3





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


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; ?>
Go to the top of the page
+Quote Post
walus16
post 3.07.2014, 19:16:39
Post #4





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 24.05.2011

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


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!
Go to the top of the page
+Quote Post
SmokAnalog
post 3.07.2014, 19:19:02
Post #5





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


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).
Go to the top of the page
+Quote Post
walus16
post 3.07.2014, 19:29:48
Post #6





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 24.05.2011

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


@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; ?>

Go to the top of the page
+Quote Post
Turson
post 3.07.2014, 19:32:48
Post #7





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


  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; ?>
Go to the top of the page
+Quote Post
walus16
post 3.07.2014, 19:47:28
Post #8





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 24.05.2011

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


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

Ten post edytował walus16 3.07.2014, 19:47:58
Go to the top of the page
+Quote Post
SmokAnalog
post 3.07.2014, 20:04:28
Post #9





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


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.
Go to the top of the page
+Quote Post
walus16
post 3.07.2014, 20:10:48
Post #10





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 24.05.2011

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


Dokładnie tak zrobię. Pozostanę przy foreach i dodam rozwiązanie z CSS.
Go to the top of the page
+Quote Post
Turson
post 3.07.2014, 20:24:25
Post #11





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


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. }
Go to the top of the page
+Quote Post
walus16
post 3.07.2014, 20:31:45
Post #12





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 24.05.2011

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


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

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: 27.04.2024 - 23:04