Autor Zpráva
Persy
Profil *
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
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 *
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
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
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
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
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 *
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!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: