IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Php kalendář s možností načtení/přidání události

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Matěj Zábojník:19.2.2019 16:25

Ahoj, pokouším se vytvořit nějaký jednoduchý php kalendář a možností přidání události k určitému dni nebo propojení kalendáře s databází a načtení události z ní. Mám vytvořený jednoduchý kalendář, kde si můžu přepínat měsíce. Zasekl jsem se u přidávání těch událostí. Jestli máte někdo nějaký tip jak začít, byl bych rád, popřípadě jestli jdu celkově na ten kalendář správně. Dělám to prvně a dost funkcí jsem si hledal na internetu.

Zkusil jsem: Natavil jsem jednotlivé políčka kalendáře klikací a při kliknutí na vybraný datum jsem se snažil poslat si datum. Jenže tady nastal problém s funkcí $timestamp, kde po se mi po odeslání data přeformátoval kalendář (přeházely mi volné políčka v kalendáři, tudíž 1. den měsíce začínal jindy než měl.

Chci docílit: Mým cílem je, abych si mohl na vybraný den přidat událost, popřípadě načíst danou událost z databáze

Editováno 19.2.2019 16:26
 
Odpovědět
19.2.2019 16:25
Avatar
Tomáš Novotný:19.2.2019 17:04

ahoj, asi jako nejjednodušší je přidat do prokliku odkaz na formulář (jiný php soubor) ve kterém vytvoříš událost
do odkazu si můžeš poslat v parametr den a ten se ti může předvyplnit do formulářového políčka datum...

napsal bych to v kódu, ale jsem lenivý to opisovat z tvého obrázku...

Nahoru Odpovědět
19.2.2019 17:04
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Odpovídá na Tomáš Novotný
Matěj Zábojník:19.2.2019 17:10

Kód je zde, moc by mi to pomohlo.

<?php
// nastaveni casoveho pasma
date_default_timezone_set('Europe/Prague');
// ym - rok, mesic - datum
if (isset($_GET['ym'])) {
    $ym = $_GET['ym'];
} else {
    // soucasny datum
    $ym = date('Y-m');
}
$timestamp = strtotime($ym . '-01');  // funkce ktera vypise pocet vterin od data 1. 1. 1970 (pocet vterin nastavi od aktulaniho roku, mesice a den nastavim jako 1.)
print $timestamp; //pouze zkouska jak to funguje
if ($timestamp === false) {
    $ym = date('Y-m');
    $timestamp = strtotime($ym . '-01');
}
// dnes (Formát:2019-08-8)
$dnes = date('Y-m-j');
// nadpis (Formát:August, 2019)
$nadpis = date('F, Y', $timestamp);
// odkazy na predchozi a nasledujici mesic
$predchozi = date('Y-m', strtotime('-1 month', $timestamp));
$nasledujici = date('Y-m', strtotime('+1 month', $timestamp));
// pocet dni v mesici (t = 28-31 dnu v mesici)
$pocetdnu = date('t', $timestamp);
// 1:Mon 2:Tue 3: Wed ... 7:Sun (N = kazdemu datu pripradi den)
$zacatekmesice = date('N', $timestamp);
// pole pro kalendar - tydny
$tydny = [];
$tyden = '';
// pridani prazdnych policek do kalendare
//bude pridavat prazdne policka po dobu ($zacatekmesice - 1), coz se v pripade unora 2019 rovna 4
$tyden .= str_repeat('<td></td>', $zacatekmesice - 1);


for ($den = 1; $den <= $pocetdnu; $den++, $zacatekmesice++) {
    $datum = $ym . '-' . $den;
    if ($dnes == $datum) {
        $tyden .= '<td class="today">';
        //print("\calendar.php?".$dnes);
    } else {
        $tyden .= '<td class="obsazeno"><a class="odkaz" href=calendar.php?>';
        $datum = $ym . '-' . $den;
    }
    $tyden .= $den . '</a></td>';
    // nedele nebo posledni den mesice
    if ($zacatekmesice % 7 == 0 || $den == $pocetdnu) {
        // posledni den mesice
        if ($den == $pocetdnu && $zacatekmesice % 7 != 0) {
            // prazdne bunky
            $tyden .= str_repeat('<td></td>', 7 - $zacatekmesice % 7);
        }
        $tydny[] = '<tr>' . $tyden . '</tr>';
        $tyden = '';
    }
}
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>PHP Calendar</title>
    <link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet">
    <style>
        .container {
            font-family: 'Montserrat', sans-serif;
            /*text-align: center;*/
            margin-left: 20rem;
        }
        .list-inline {
            text-align: center;
            margin-bottom: 30px;
        }
        .title {
            font-weight: bold;
            font-size: 26px;
        }
        th {
            text-align: center;
        }
        td {
            height: 100px;
            width: 100px;
            text-align: center;

        }
        .obsazeno:hover{
            border: 1px solid black;
        }
        th:nth-of-type(6), td:nth-of-type(6) {
            color: blue;
        }
        th:nth-of-type(7), td:nth-of-type(7) {
            color: red;
        }
        .today {
            background-color: ghostwhite;
            border: 1px solid black;
        }
        .odkaz{
            text-decoration: none;
            color: black;
        }
        .odkaz:hover{

        }
    </style>
</head>
<body>
    <div class="kalendar">

        <span class="nadpis"><?= $nadpis; ?></span><br><!--mesic + rok-->
        <a href="?ym=<?= $predchozi; ?>">&lt; prev</a> <!--talcitko pro predchozi mesic-->
        <a href="?ym=<?= $nasledujici; ?>">next &gt;</a> <!--tlacitko pro nasledujici mesic-->
        <!--<p><a href="?ym=<?= $dnes; ?>">Today</a></p>-->
        <table>
            <thead>
                <tr>
                    <th>Monday</th>
                    <th>Tuesday</th>
                    <th>Wednesday</th>
                    <th>Thursday</th>
                    <th>Friday</th>
                    <th>Saturday</th>
                    <th>Sunday</th>
                </tr>
            </thead>
            <tbody>
                <?php
                    foreach ($tydny as $tyden) {
                         print $tyden;
                    }
                    ?>
            </tbody>
        </table>
    </div>
    <!--<div class="udalost">
        <?= $datum; ?>
    </div>-->
</body>
</html>
 
Nahoru Odpovědět
19.2.2019 17:10
Avatar
Tomáš Novotný:19.2.2019 17:36

mrkni zde https://tomas-novotny.eu/itnet/66094/ a pokud je to ono pošlu změny...

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
19.2.2019 17:36
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Odpovídá na Tomáš Novotný
Matěj Zábojník:19.2.2019 17:47

Ano něco takového jsem myslel.

 
Nahoru Odpovědět
19.2.2019 17:47
Avatar
Odpovídá na Matěj Zábojník
Tomáš Novotný:19.2.2019 17:54

ej, tu není možné přidat přílohu jinou než obrázkovou :-/ ti tam udělám odkaz někde.. si to stáhneš..

Nahoru Odpovědět
19.2.2019 17:54
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Tomáš Novotný
David Jančík:19.2.2019 18:46

Můžeš použít tlačítko Máš dlouhý zdroják? a vytvořit si soubory tam.

Nahoru Odpovědět
19.2.2019 18:46
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Odpovídá na David Jančík
Tomáš Novotný:19.2.2019 18:50

díky za info, na to jsem koukal, ale to mi přijde příliš složité ... takového klikání :-O

Nahoru Odpovědět
19.2.2019 18:50
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Odpovídá na Tomáš Novotný
Matěj Zábojník:19.2.2019 19:52

Jinak zatím moc děkuji!

 
Nahoru Odpovědět
19.2.2019 19:52
Avatar
Matěj Zábojník:20.2.2019 17:34

Trošku jsem si to upravil a zasekl jsem se na nějakém způsobu vypsání té vytvořené události do daného čtverečku tabulky kalendáře. Prostě bych chtěl, že když je daný den vytvořená nějaká událost, aby např. měl jinou barvu nebo něco takového. No a třeba po nakliknutí vypsat tu událost pod kalendář. Viděl jsem že to někde mají řešené JavaScriptem, ale v tom se vůbec neorientuju.. Zkusí mě prosím někdo navést? Nějak se s tím trápím... Zdroják kdyžtak poskytnu

 
Nahoru Odpovědět
20.2.2019 17:34
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.