Autor | Zpráva | ||
---|---|---|---|
Persy Profil * |
#1 · Zasláno: 21. 12. 2016, 15:31:56
Zdravím,
potřeboval bych poradit, mám v databázi uložené záznamy, které v sobě mají krom názvu a dalších informací - den (1, 2, 3, ...) a čas (07:00, 08:00, 08:30, 15:30 apod). A potřeboval bych vytvořit tabulku, která by vypadala podobně (strukturou), jako je zde: Jak toho nejlépe docílit? Díky! |
||
Keeehi Profil |
#2 · Zasláno: 21. 12. 2016, 18:15:19
Ta tabulka co nám ukazuješ má přesně hodinové bloky, které začínají v celou.
Jak dlouhé jsou tvé bloky? Vždy stejně nebo to je proměnlivé? Jde o to, jak se pak budou rovnat pod sebe. Taky je ještě potřeba vědět, kolik textu se v buňce má zobrazovat a co s textem, který se tam nevejde. |
||
Persy Profil * |
#3 · Zasláno: 22. 12. 2016, 15:06:57
Keeehi:
Časy jsou sice i 7:15, 8:30, ale vždy je to jen hodina a vzhledem k tomu, že na ose Y nebudu mít časy, tak není problém, aby na jednom řádku byl kurz, který začíná v 7:15 a vede toho kurz, který začne v 7:30. Spíš mi jde o to, když vytáhnu data z databáze, tak jak je pak naskládat takhle do tabulky. Díky! |
||
Tomášeek Profil |
#4 · Zasláno: 22. 12. 2016, 15:54:45
Persy:
Vhodně si je v dotazu na DB seřaď (tabulka se vypisuje po řádcích) a pak budeš v cyklu jen kontrolovat, jestli máš nějakou událost vypsat (a jak dlouhou), nebo vypíšeš na daný den prázdnou buňku. |
||
Kajman Profil |
#5 · Zasláno: 22. 12. 2016, 16:13:09
Nebo ty bloky pozicovat absolutně a vždy určit odsazení od horního kraje (místo pro hlavičku + čas začátku aktuálního bloku - nejmenší čas začátku ) a výšku (délku trvání).
Bude potřeba nastavit i výšku celého rozvrhu dle nejpozdnějšího konce. Živá ukázka |
||
Tomášeek Profil |
#6 · Zasláno: 22. 12. 2016, 16:17:02
Kajman:
To raději ne, berme v potaz nevýhody. Typicky nemožnost responsivnosti (pokaždé by se muselo vše přepočítávat), tvoření tabulky netabulkou. Toto jsou ukázková typická data, kde jinde tabulku použít, než pro časový rozvrh? Možná nedostupnost JS, atd., atd. |
||
Kajman Profil |
#7 · Zasláno: 22. 12. 2016, 22:38:59
Výhodou je jednoduché programování. Responzivnost se dá řešit procenty (v ukázce je pro jednoduchost použita jednotka em, ale pro výšku a posun od horního okraje lze použít i procenta). Javascript tam žádný není.
Když to budete chtít dávat do tabulky a používat rowspany tak, aby souhlasila časová osa alespoň na ty čtvrthodiny, tak nestačí jen v dotaze data seřadit a pak je vypisovat. Bude asi potřeba všechna data přeuložit do pomocných struktur, aby se výpočty pro sestavení tabulky daly provést. Přijde mi, že v tabulce bude nejtěžší řešení kolizí (např. v úterý se kryjí od 10 do 11 dva bloky) kdy může být potřeba mít jeden den rozdělený do více sloupců (podle nejmenšího společného násobku variant počtu kolizí v daný den). Opačná tabulka, kde bude jeden den v řádku by byl jednodušší, ale opět to zkomplikuje to překrývání termínů. Tabulka by byla pěkná, ale vygenerovat ji dobře, není tak jednoduché. |
||
Persy Profil * |
#8 · Zasláno: 23. 12. 2016, 15:46:09
Zatím jsem to vyřešil tak, že jsem si všechny kurzy vypsal do pole a následně kontroluji, zda pro daný den a čas existuje události. Nevím zda je to správné řešení, každopádně dělá to, co jsem potřeboval:
<table> <thead> <tr> <td> <h3>Pondělí</h3> </td> <td> <h3>Úterý</h3> </td> <td> <h3>Středa</h3> </td> <td> <h3>Čtvrtek</h3> </td> <td> <h3>Pátek</h3> </td> <td> <h3>Neděle</h3> </td> </tr> </thead> <tbody> <? $pocet_hodin = mysqli_query($db, " select cas, hodiny from kurzy where obdobi = 16 and zobrazit = 1 group by hodiny ORDER BY cas asc") or die(mysqli_error($db)); while($v = mysqli_fetch_array($pocet_hodin)){ ?> <tr> <td> <?php foreach ($kurz_cas as $key => $value) { if($kurz_hodiny[$key] == $v['hodiny'] and $kurz_den[$key] == 1){ ?> <h4><?php echo $datum[$key];?> <?php echo zkratit($kurz_nazev[$key],20);?></h4> <?php } } ?> </td> <td> <?php foreach ($kurz_cas as $key => $value) { if($kurz_hodiny[$key] == $v['hodiny'] and $kurz_den[$key] == 2){ ?> <h4><?php echo $datum[$key];?> <?php echo zkratit($kurz_nazev[$key],20);?></h4> <?php } } ?> </td> <td> <?php foreach ($kurz_cas as $key => $value) { if($kurz_hodiny[$key] == $v['hodiny'] and $kurz_den[$key] == 3){ ?> <h4><?php echo $datum[$key];?> <?php echo zkratit($kurz_nazev[$key],20);?></h4> <?php } } ?> </td> <td> <?php foreach ($kurz_cas as $key => $value) { if($kurz_hodiny[$key] == $v['hodiny'] and $kurz_den[$key] == 4){ ?> <h4><?php echo $datum[$key];?> <?php echo zkratit($kurz_nazev[$key],20);?></h4> <?php } } ?> </td> <td> <?php foreach ($kurz_cas as $key => $value) { if($kurz_hodiny[$key] == $v['hodiny'] and $kurz_den[$key] == 5){ ?> <h4><?php echo $datum[$key];?> <?php echo zkratit($kurz_nazev[$key],20);?></h4> <?php } } ?> </td> <td> <?php foreach ($kurz_cas as $key => $value) { if($kurz_hodiny[$key] == $v['hodiny'] and $kurz_den[$key] == 7){ ?> <h4><?php echo $datum[$key];?> <?php echo zkratit($kurz_nazev[$key],20);?></h4> <?php } } ?> </td> <?php } ?> </tbody> </table> Možná dva dotazy: 1) Je to vhodné řešení? 2) Dá se přepsat do funkce výpis z pole, tzn. tuto část: foreach ($kurz_cas as $key => $value) { if($kurz_hodiny[$key] == $v['hodiny'] and $kurz_den[$key] == 1){ } } Přepsat do "function vypisKurzy($den, $hodina){.."? Nevím jak to řešit, když se jedná o pole. Díky moc! |
||
Časová prodleva: 8 let
|
0