Autor Zpráva
BunnyBugs6
Profil *
Zdravím,
mám prosbičku. Mám vytvořený kalendář (viz kód níže), kde se mi vytvoří automaticky odkaz na událost daného dne. Vše funguje v pořádku jak má, ale ve chvíli, kdy mám událost den po sobě, tak se mi ty dva dny spojí v jeden den, resp. datum s odkazem zůstane, ale spojí se mi to do jednoho dne v týdnu, třeba středa, náhled zde:

http://jmrtrio.cz/fans/vyjezdy/ (kalendář vpravo)

Hledal jsem a zkoušel toho dost, ale nepovedlo se mi tu, pravděpodobně malou chybu, najít. Mohu poprosit zkušené o radu, kde ta chyba je?
Děkuji mnohokrát.

class Calendar
{
    
        private $events;
    private $monthNames = array(1 => 'leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec',
                                    'srpen', 'září', 'říjen', 'listopad', 'prosinec');
        public function __construct($events) {
            $this->events = $events;
        }
        
        /**
     * Vypíše kalendářní měsíc
     * @param null $month - kalendářní měsíc, který se má vypsat
     * @param null $year
     */
    public function renderCalendar($month = null, $year = null)
    {
        // hlavička kalendáře
                $previousMonth = ($month - 1) > 0 ? $month - 1 : 12;
        $nextMonth = ($month % 12) + 1;

        $previousYear = $previousMonth > $month ? $year - 1 : $year;
        $nextYear = $nextMonth < $month ? $year + 1 : $year;

        // navigace
        echo('
                    <div id="kalendar">
                        <table>
                             <tr><th><a href="http://' . $_SERVER['SERVER_NAME'] . '/fans/vyjezdy/?date=' . $previousYear . '-' . $previousMonth . '"> << </a></th>
                                    <th colspan="5">' .
                                        // měsíc slovně -> první písmeno velké - bere i s diakritikou
                    mb_convert_case($this->monthNames[$month], MB_CASE_TITLE, 'UTF-8') . ' ' . $year . '</th>
                                    <th><a href="http://' . $_SERVER['SERVER_NAME'] . '/fans/vyjezdy/?date=' . $nextYear . '-' . $nextMonth . '"> >> </a></th>
                                </tr>
                        </table>
                        <table>
                <tr>
                    <td>Po</td><td>Út</td><td>St</td><td>Čt</td><td>Pá</td><td>So</td><td>Ne</td>
                </tr>
                <tr>');

        // počet dnů pro daný měsíc v roce
        $daysInMonth = cal_days_in_month(CAL_GREGORIAN, $month, $year);

        // zjištění začátku týdne
        $weekDay = idate("w", mktime(0, 0, 0, $month, 1, $year));
        if ($weekDay == 0) // začíná nedělí, ta je u nás však 7., 0. pozici vynecháme
            $weekDay = 7;

        // vynecháme místo
        for ($i = $weekDay; $i > 1; $i--)
            echo('<td>&nbsp;</td>');

        // vypsání jednotlivých dnů
                
            for ($day = 1; $day <= $daysInMonth; $day++)
        {
                
                 echo('<td');
            // pokud je aktuální měsíc a rok, označí se den -> lze pak zvýraznit pomocí css
            // if (($day == $today) && ($month == idate('m')) && ($year == idate('Y')))
            //    echo(' id="calendar-today" ');
                        
                    $dateodk = $year . "-" . str_pad($month, 2, 0, STR_PAD_LEFT) . "-" . str_pad($day, 2, 0, STR_PAD_LEFT);
                           if (isset($this->events[$dateodk])) {
                                echo " class='kalendar-akce' ";
                                echo "><a href='http://" . $_SERVER['SERVER_NAME'] . "/fans/vyjezdy/detail/?vyjezd=" . $this->events[$dateodk] . "' title = '" . $this->events[$dateodk] . "'>";
                           } else {
                                echo('>');
                           }
                                echo ($day);
                                
                            if (isset($this->events[$dateodk])) {
                            echo "</a>";
                            }
                           
                      
                    
            // řádkování podle týdnů
            if (($weekDay % 7) == 0)
                echo('</tr><tr>');

            $weekDay++;
            if ($weekDay > 7)
                $weekDay = 1;
                        
                        echo ('</td>');
        }

        echo('</tr>
                        </table></div>');
    }

    
}


$c = new Calendar($events);

// přidání + vypsání událostí pro dané datum
if ((isset($_GET['showcal'])) && ($_GET['showcal']))
{
    list($year, $month, $day) = explode('-', $_GET['showcal']);
}
// vypsání kalendáře pro daný měsíc
else
{
    $month = idate('m');
    $year = idate('Y');

    if ((isset($_GET['date'])) && ($_GET['date']))
        list($year, $month) = explode('-', $_GET['date']);

    $c->renderCalendar($month, $year);
}

?> 
mimochodec
Profil
fans-layout.css, ř. 221:

kalendar-akce { 
background-color: #FFED00;
color: #2B2A29;
display: block;

Ten display: block; zruš. Kromě toho: to nezalomení není ta největší vada na kráse.
BunnyBugs6
Profil *
Super, funguje, díky moc :)
A co dalšího je vadou na kráse?, jsem začátečník, rád si nechám poradit :)
mimochodec
Profil
No, design mi urval oči. Je to brutálně kontrastní. Měl bych víc připomínek, ale jestli o ně stojíš, přesuň se s tím do "Názor na stránku". Já se vyjádřím až zítra, teď melu z posledního.
BunnyBugs6
Profil *
Nevím, jak to mám přesunout do jiného téma a jak jsem psal, rád si nechám poradit :)
mimochodec
Profil
Udělej si nové vlákno v Názor na stránku

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