Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Smarty][MySQL][PHP] Rysowanie tabelki (krzyżowej?)
kasior
post
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


Pomózcie proszę, bo juz sie zakręciłem zupełnie. Mam dane, ale z rysowaniem tego juz problem.
Ale po kolei. Są dwie tabele: drivers i graph. W pierwszej sa kierowcy, w drugiej sa zapisywane dane ich statusów w poszczególnym tygodniu (np "w aucie")

Wygląda to tak:



Jedynki sa wpisane tylko na razie,zeby coś było widać.

Najpierw wyciągam z bazy dane:

  1. $sql= 'select * from drivers where active = "1"';
  2. $stmt = $hDB->prepare($sql);
  3. $stmt->execute();
  4. $num = $stmt->rowCount();
  5.  
  6.  
  7. if ($num>0){
  8. $art = $stmt->setFetchMode(PDO::FETCH_ASSOC);
  9. for ($i=0;$i<$num;$i++){
  10. $art = $stmt->fetch();
  11. $tmpart[] = $art;
  12. $cat_ids[$i] = $tmpart[$i]['driver_id'];
  13.  
  14. }
  15. }
  16.  
  17. foreach ($cat_ids as $cat) {
  18.  
  19. $sql= 'select * from graph where driver = :driver';
  20. $stmt = $hDB->prepare($sql);
  21. $stmt->bindParam(':driver',$cat,PDO::PARAM_INT);
  22. $stmt->execute();
  23. $num = $stmt->rowCount();
  24.  
  25. if ($num>0){
  26. $arty = $stmt->setFetchMode(PDO::FETCH_ASSOC);
  27. for ($i=0;$i<$num;$i++){
  28. $arty = $stmt->fetch();
  29. $arty['note'] = html_entity_decode(stripslashes($arty['note']),ENT_QUOTES,'utf-8');
  30. $tmparty[$arty['driver']][] = $arty;
  31. }
  32.  
  33. }
  34.  
  35. }
  36. $smarty->assign('lsc',$tmpart);
  37. $smarty->assign('plsc',$tmparty);



nastepnie rysuję sobie wiersze i komórki:

  1. <!-- zawartośc tabel -->
  2. <div class="rightd" id="rightd">
  3. {section start=0 step=1 name=tmpart loop=$lsc}
  4. <div style="width:2765px;overflow:hidden;">
  5.  
  6. {assign var=idc value=$lsc[tmpart].drivers_id}
  7.  
  8. {section start=0 step=1 name=arty loop=52}
  9. {if $smarty.section.arty.rownum == $plsc[$idc][arty].week}
  10. <div data-week="{$smarty.section.arty.rownum}" data-driver_id="{$lsc[tmpart].driver_id}" data-driver_name="{$lsc[tmpart].name}" class="cell tips w{$smarty.section.arty.rownum}" id ="w{$smarty.section.arty.rownum}d{$lsc[tmpart].driver_id}" tip="week {$smarty.section.arty.rownum} " onClick="showdial('klasa', '500', this);" >
  11. 1
  12. </div>
  13. {else}
  14. <div data-week="{$smarty.section.arty.rownum}" data-driver_id="{$lsc[tmpart].driver_id}" data-driver_name="{$lsc[tmpart].name}" class="cell tips w{$smarty.section.arty.rownum}" id ="w{$smarty.section.arty.rownum}d{$lsc[tmpart].driver_id}" tip="week {$smarty.section.arty.rownum} " onClick="showdial('klasa', '500', this);" >
  15.  
  16. </div>
  17. {/if}
  18. {/section}
  19.  
  20.  
  21. <div class="clearing"></div>
  22.  
  23. </div>
  24. {/section}
  25. </div>
  26. <div class="clearing"></div>
  27. <!-- end zawartośc tabel -->



N i wiem,że w rysowaniu kkomórek jest zle bo póki co mam puste komórki i ani tak ani siak.
Poprosze o pomoc.


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
nospor
post
Post #2





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




Po pierwsze zacznij od poprawnego przygotowania danych. To co ty wybrales to najgorszą z mozliwych opcji...
http://nospor.pl/grupowanie-wynikow.html

Majac juz poprawnie i optymalnie przygotowane dane, nie wiem w czym problem.

Lecisz po userach i generujesz wiersz dla kazdego usera. Standarrdowo generujesz komorki na numer i nazwisko, a potem generujesz komorki tyle ile masz tych tygodni.


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

"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
kasior
post
Post #3





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


No to mam tyle tak? I dalej stoję. sad.gif

  1. $sql= 'select d.driver_id DID, d.active, g.driver GID, g.* from drivers d left join graph g on d.driver_id = g.driver where d.active = "1"';
  2. $stmt = $hDB->prepare($sql);
  3. $stmt->execute();
  4. $stmt->fetchAll(PDO::FETCH_GROUP);


--------------------
Zapraszam do odwiedzenia mojej strony.
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




To zamiast stac, usiadź i przecytaj co masz napisane i podane na tacy w linku co ci podalem


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

"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
kasior
post
Post #5





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


przecież widze, ale ty nie widzisz,ze ja uzywam PDO i musze jakoś to przepisać. sek w tym,że maam chyba pomroczność jasną i nic mi nie wychodzi. Naprawde nie chcesz napisać kilka linijek,zeby nakierowac?? Dla was to proste a ja dłubie to 3 dzień bez skutku.


--------------------
Zapraszam do odwiedzenia mojej strony.
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




Cytat
ale ty nie widzisz,ze ja uzywam PDO
No bez zartow.... co ma piernik do wiatraka? U mnie sa pobrane dane z zapytania i ty musisz pobrac danez z zapytania. Pozniej obrobka jest taka sama niezaleznie czy to PDO czy nie.
Powód edycji: [nospor]:


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

"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
kasior
post
Post #7





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


ok ok smile.gif Pobrałem dane i mam teraz cos takiego:

  1. (
  2. [7] => Array
  3. (
  4. [0] => Array
  5. (
  6. [graph_id] => 17
  7. [driver] => 7
  8. [week] => 1
  9. [status] => 2
  10. [color] => 91de2d
  11. [note] =>
  12. [truck] => 3
  13. )
  14.  
  15. [1] => Array
  16. (
  17. [graph_id] => 18
  18. [driver] => 7
  19. [week] => 10
  20. [status] => 4
  21. [color] => fff555
  22. [note] =>
  23. [truck] => 3
  24. )
  25.  
  26. [2] => Array
  27. (
  28. [graph_id] => 19
  29. [driver] => 7
  30. [week] => 8
  31. [status] => 2
  32. [color] => 91de2d
  33. [note] =>
  34. [truck] => 0
  35. )
  36.  
  37. )
  38.  
  39. [8] => Array
  40. (
  41. [0] => Array
  42. (
  43. [graph_id] => 20
  44. [driver] => 8
  45. [week] => 7
  46. [status] => 3
  47. [color] => ff4444
  48. [note] =>
  49. [truck] => 0
  50. )
  51.  
  52. [1] => Array
  53. (
  54. [graph_id] => 21
  55. [driver] => 8
  56. [week] => 1
  57. [status] => 3
  58. [color] => ff4444
  59. [note] =>
  60. [truck] => 0
  61. )
  62.  
  63. )
  64.  
  65. )


wyświetlam:

  1. <!-- zawartośc tabel -->
  2. <div class="rightd" id="rightd">
  3. {section start=0 step=1 name=tmpart loop=$lsc}
  4. <div style="width:2765px;overflow:hidden;">
  5.  
  6. {assign var=idc value=$lsc[tmpart].driver_id}
  7.  
  8. {section start=0 step=1 name=arty loop=$plsc[$idc]}
  9.  
  10.  
  11. <div data-week="{$smarty.section.arty.rownum}" data-driver_id="{$lsc[tmpart].driver_id}" data-driver_name="{$lsc[tmpart].name}" class="cell tips w{$smarty.section.arty.rownum}" id ="w{$smarty.section.arty.rownum}d{$lsc[tmpart].driver_id}" tip="week {$smarty.section.arty.rownum} " onClick="showdial('klasa', '500', this);" >
  12. {$plsc[$idc][arty].week}
  13. </div>
  14. {sectionelse}
  15.  
  16. {/section}
  17.  
  18.  
  19. <div class="clearing"></div>
  20.  
  21. </div>
  22. {/section}
  23. </div>
  24. <div class="clearing"></div>
  25. <!-- end zawartośc tabel -->
  26.  



i mam:



Niby ok, ale co tu dopisac w wyświetlaniu, zeby puste komórki pokazało jak nie ma danych questionmark.gif

mogę zronbić srodkowa pętle tak:

  1. {section start=0 step=1 name=arty loop=52}
  2.  
  3.  
  4. <div data-week="{$smarty.section.arty.rownum}" data-driver_id="{$lsc[tmpart].driver_id}" data-driver_name="{$lsc[tmpart].name}" class="cell tips w{$smarty.section.arty.rownum}" id ="w{$smarty.section.arty.rownum}d{$lsc[tmpart].driver_id}" tip="week {$smarty.section.arty.rownum} " onClick="showdial('klasa', '500', this);" >
  5. {if $plsc[$idc][arty].week}{$plsc[$idc][arty].week}{else}-{/if}
  6. </div>
  7. {sectionelse}
  8.  
  9. {/section}


i wynik:


ale ciągle nie wskakuja komórki na swoje miejsca.


--------------------
Zapraszam do odwiedzenia mojej strony.
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




Gdy wyswietlasz dany wiersz, to masz w nim zrobic petle po tygodniach i dopiero w tej petli, jesli dany user ma dane z tego tygodnia, to wyswietlasz komorke z danymi, jak nie ma, to wyswietlasz pustą komorke


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

"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
kasior
post
Post #9





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


No własnie sek w tym jak w tym konkretnym przypadku, jeżeli nie mam wpisanych danych dla wszystkich tygodni dla usera. Ta tabelka słuzy min do właśnie wpisywania tych danych. Klika sie komórke , otwiera sie okienko modalne które pobiera data-week i data-driver_id i ajaxowo juz wszystko tam pokazuje i zapisuje. To działa super. Brakuje tylko tego gównianego wyswietlania tabelki.

Wiem,ze mnie zmuszasz do myslenia - i dobrze, ale chyba czegos nie trybie albo nie wiem. Pewnie trzeba jeszcze jakaś pętke w smarty zastosowac albo cos.. bo musze jakoś zadac ten warunek,że jeżeli nie ma danych to ma byc pusta komórka, a jak ma dane to np zakolorowana kolorem danego statusu (to akurat nie problem)


--------------------
Zapraszam do odwiedzenia mojej strony.
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




Pseudokod:

petla po userach {
TR
TD - numer wiersza
TD - imie nazwisko
petla po tablicy z tygodniami {
TD - jesli aktualny user ma dane dla aktualnego tygodnia to wyswietl te dane, jak nie to -
}
}
gdzie tablica z tygodniami to tablica, w ktorej trzymasz wszystkie tygodnie jakie mogą byc: 1,2,3,4...... 52

I juz.


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

"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
kasior
post
Post #11





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


Ja to wszystko kumam, sęk w tym,ze nie mam tablicy w której trzymam wszystkie tygodnie. spójrz w kody - rysuje tygodnie za pomoca pętli
  1. {section start=0 step=1 name=arty loop=52}


Jedyne co moge tu pobrac to $smarty.section.arty.rownum gdzie ta wartosc jest numerem tygodnia właśnie.
Juz próbowałem:

  1. {section start=0 step=1 name=arty loop=52}
  2.  
  3. {if $plsc[$idc][arty].week and $smarty.section.arty.rownum == $plsc[$idc][arty].week}
  4.  
  5. <div>OK</div>
  6.  
  7. {else}
  8.  
  9. <div> - </div>
  10. {/if}
  11. {/section}


czyli jeżeli jest week i jeżeli on sie równa nr w pętki to wyswietla tak a jak nic nie ma to inaczej - bez skutku a raczej inne cuda wychodzą


Ty mi dobrze przekazujesz i ja to rozumiem dokładnie, problem tkwi tylko w odpowiednim tego wpisaniu.



--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
nospor
post
Post #12





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




{if $plsc[$idc][arty].week and $smarty.section.arty.rownum == $plsc[$idc][arty].week}
Widac ten warunek nie jest prawdziwy. Sprawdz co zawiera dokladnie kazdy element, ktory tu porownujesz i bedziesz mial odpowiedz.


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

"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

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: 20.08.2025 - 14:54