Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Komponowanie dynamicznych kolumn <TABLE>
Forum PHP.pl > Forum > PHP
kukix
Witam.

Tworze pewną tabelke, spis i potrzebuje zrobić mechanizm, który pozwoli na wybieranie jakie kolumny ma zawierać spis.

Kiedyś zrobiłem taką pętle w pętli, jednak ilośc kodu była bardzo duża.

Prosze o podpowiedź, lub sugestie jak wykonac taką tabeke, jak przetrzymywać informacje o kolumnach?

Może jakiś przykładowy kod?
werek
a możesz podać przykład tego co chcesz zrobić? bo twój opis mozna dwojako rozumieć tj potrzebujesz mechanizmy do wygenerowania tabeli html, badz potrzebujesz mechanizmu który zamapuje dane do pozniejszego wylistowania w tabelce html
kukix
Już tłumacze.

Mam w bazie tabele z 15 polami:

  1. "MOJA_TABELA"
  2.  
  3. POLE_1 INT(11)
  4. POLE_2 INT(11)
  5. POLE_3 INT(11)
  6. POLE_4 INT(11)
  7. POLE_5 VARCHAR(255)
  8. POLE_6 VARCHAR(255)
  9. POLE_8 VARCHAR(255)
  10. POLE_9 INT(11)
  11. POLE_10 TINYINT(1)
  12. POLE_11 TINYINT(1)
  13. POLE_12 VARCHAR(255)
  14. POLE_13 VARCHAR(100)
  15. POLE_14 VARCHAR(100)
  16. POLE_15 INT(11)


Wybram sobie, które kolumny mnie interesują: $wybrane_pola = array(2,5,6,7,8,10,12,14,15);

Generuje teraz w HTML tabelke <TABLE> i chce wybierac sobie dynamicznie, które kolumny mają się wyświetlać.

Problem w tym, że nie jest to po prostu sucha tabelka z tymi danymi, ale dla różnych kolumn są różne zawartości.

Np:
Dla pola 15 w zalęzności jak jest wartośc 1 pokazuje "tak" , jak jest 0 pokazuje "nie".
Dla pola 9 wyświetlam szablon: "<td><a href="index.php?d={WARTOSC_POLA_9}">link</a></td>"
itd dla innych pól.
werek
to mozna osiągnąć na kilka sposobów ale jest pewien kocept który pozwoli Ci to uzyskać a jest konfiguracyjnie prosty w późniejszym uzytkowaniu, przykład poniżej (zakładam że wiesz jak sie pobiera z bazy danych i jak buduje tabele html, tak więc uzyje pseudo php)

  1. $wybrane_pola = array(2,5,6,7,8,10,12,14,15);
  2. $fieldTemplate=array(
  3. 2 => '<td><a href="index.php?d=%s">link</a></td>'
  4. );
  5. while ($row=$query->fetchRow()) {
  6. foreach ($row as $key => $value) {
  7. if (in_array($key,$wybrane_pola)) {
  8. echo sprintf($fieldTemplate[$key],$value);
  9. }
  10. }
  11. }


powyższe umozliwi ci wypełnienie tabeli numerami wybranych pól (przy założeniu że trybem poboru danych z bazy bedzie numeracyjne a nie asocjacyjne) i kiedy dojdzie do budowania tabeli jego wartość będzie wyswietlona zgodnie z template. możesz również zastosować dodatkowa funkcje w której zaszyjesz logike która podejmie decyzje jak ma być dana wartosc przedstawiona w zaleznosci od wartosci jaka przyjmuje vide:

  1. function processValue($value,$templateName=null){
  2. switch ($templateName){
  3. case 'tak_nie':
  4. return ($value == 1) ? 'Tak' : "Nie";
  5. break;
  6. //tutaj dodajesz sobie logike w zaleznosci od formatu
  7. default:
  8. return $value;
  9. break;
  10. }
  11. }
  12. $wybrane_pola = array(2,5,6,7,8,10,12,14,15);
  13. $fieldTemplate=array(
  14. 2 => 'tak_nie'
  15. );
  16. while ($row=$query->fetchRow()) {
  17. foreach ($row as $key => $value) {
  18. if (in_array($key,$wybrane_pola)) {
  19. echo processValue($value,$fieldTemplate[$key]);
  20. }
  21. }
  22. }


chociaż tego typu przetwarzanie w ramach aplikacji MVC powinno się odbyć w widoku, czyli trzeba by było napisać funkcje processValue zgodnie z wymaganiami konkretnego systemu szablonów PHPtal,Smarty,Zend_View. decyzja należy do Ciebie.

polecam manual php, wbrew pozorom to nie ujma z niego korzystać, nawet nie wiesz jak wiele problemów związanych z takimi przyziemnymi problemami jest rozwiązanych w komentarzach pod wpisami funckji.

pozdrawiam i życze najlepszego z tym projektem
kukix
Cytat(werek @ 23.02.2013, 13:08:43 ) *
to mozna osiągnąć na kilka sposobów ale jest pewien kocept który pozwoli Ci to uzyskać a jest konfiguracyjnie prosty w późniejszym uzytkowaniu, przykład poniżej (zakładam że wiesz jak sie pobiera z bazy danych i jak buduje tabele html, tak więc uzyje pseudo php)


......

pozdrawiam i życze najlepszego z tym projektem


Dziekuje za kod, już analizuje smile.gif
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.