Autor Zpráva
jdanek
Profil
Poradíte prosím jak zkrátit/zkrášlit tento kód, jde o výpis buněk kalendáře

legenda:
$days .. pole s objekty Day
$day->day .. cislo dne v mesici
$day->wday .. cislo dne v tydnu (1-7 -> po-ne)
$day_counter .. celkovy pocet dni mesice (unor .. 28)

<?php
        $column = 1;
        foreach ($days as $day)
        {
            if (1 == $column)
            {
                echo "<tr>";
            }
 
            if (1 == $day->day)
            {
                echo str_repeat("<td>&nbsp;</td>", ($day->wday - 1));
                $column = ($day->wday);
            }
 
            echo "<td>{$day->day}</td>";
            ++$column;
 
            // day_counter obsahuje celkovy pocet dni mesice
            if ($day->day == $day_counter && $day->wday < 7)
            {
                echo str_repeat("<td>&nbsp;</td>", (7 - $day->wday));
                $column = 8;
            }
 
            if (7 < $column)
            {
                echo "</tr>";
                $column = 1;
            }
        }
        ?>

edit: nechci rady typu
 if (1 == $column)
           echo "<tr>";

nebo

 if (1 == $column){echo "<tr>";}
díky
Tori
Profil
Začátek prvního <tr>, konec posledního a doplnění prázdných buněk z obou stran může být i mimo cyklus. Nutné to není, mně by to možná připadalo maličko přehlednější, ale to je dost subjektivní. Na zjištění, zda zalomit řádek tabulky, je možná zaužívanější použít if ($counter % 7 === 0) nebo lépe if ($counter % NUM_COLUMNS === 0) (lépe proto, že tam není nějaké "magické číslo", ale smysluplně pojmenovaná konstanta).
Ve FAQ máme rovněž příklad na tabulkový výpis kalendáře (příp. jeho alternativní verzi), pro srovnání. Takhle krátký kousek kódu asi nejde napsat velmi různými způsoby, postup je ve všech třech případech v zásadě stejný.
jdanek
Profil
mrknu na to, díky

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:

0