Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

PHP Kalendář

PHP Ostatní PHP Kalendář

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Aplikace vznikla z hecu pro Machra na PHP a jedná se o jednoduchý kalendář napsaný v PHP.

Aplikace obsahuje zobrazení aktuálního měsíce, či zadaného přes formulář. Před začátkem a za koncem daného měsíce vypisuje dny předchozího nebo následujícího měsíce. (viz. obrázek) Samotné dny daného měsíce vypisuje postupně po řádcích, takže vám nezbude prázdný řádek na konci. Tato verze, kterou jsem nakonec odevzdal, neobsahuje akce (události) ani databázi.

Komentář od sdraca

Jsi první, koho napadlo použít select na měsíc a také zobrazit dny z minulého a nadcházejícího měsíce! :) Z kódu poznávám své tutoriály, jsem rád, že jsou užitečné. Jinak to funguje docela hezky, kód generování je přehledný, škoda, že jsi nezkusil události. Na placku to stejně je, gratuluji :)


Galerie

Program byl vytvořen v roce 2013.

 

Stáhnout

Staženo 691x (3.37 kB)
Aplikace je včetně zdrojových kódů v jazyce php

 

 

Program pro vás napsal Michal Martinek
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Aktivity (1)

 

 

Komentáře

Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Matúš Petrofčík:22.11.2013 17:01

dobrý trololo keď som začal klikať po obrázku, nič sa nedialo :D

Odpovědět  +1 22.11.2013 17:01
obsah kocky = r^2 ... a preto vlak drnká
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Matúš Petrofčík
David Čápka:22.11.2013 17:29

Klikání na screenshot také většinou nic neudělá.

Odpovědět  +2 22.11.2013 17:29
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
mkub
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
mkub:22.11.2013 17:51

ze? vypada, ako keby ten kalendar bol sucastou tej stranky :D

 
Odpovědět  +1 22.11.2013 17:51
Avatar
Alex
Člen
Avatar
Alex:17.12.2016 13:39

Píše mi toto. Notice: Undefined offset: 1 in F:\Xampp\htdoc­s\Kalendar1\Ka­lendar.php on line 93

Notice: Undefined offset: 2 in F:\Xampp\htdoc­s\Kalendar1\Ka­lendar.php on line 93

Notice: Undefined offset: 3 in F:\Xampp\htdoc­s\Kalendar1\Ka­lendar.php on line 93

Notice: Undefined offset: 4 in F:\Xampp\htdoc­s\Kalendar1\Ka­lendar.php on line 93
Funguje, ale chybové hlášky trochu vadí

Editováno 17.12.2016 13:40
 
Odpovědět 17.12.2016 13:39
Avatar
Odpovídá na Alex
Michal Ježek:28. května 11:30

Skus dat do souboru Kalendar.php tenhle kód (místo tamtoho):

<?php

class Kalendar {
    /*
     * promenná, do které se ukládá v konstruktoru první den zadaného měsíce v daném roce,
     * nebo první den aktuálního měsíce
     */
    private $datum;

    public function __construct()
    {

        // NEDEFINOVANY MESIC
        if (isset($_GET["mesic"]) != "true") {
                $amesic = Date("m");
                $_GET["mesic"] = $amesic;
        }

        // NEDEFINOVANY ROK
        if (isset($_GET["rok"]) != "true") {
                $arok = Date("Y");
                $_GET["rok"] = $arok;
        }


     $this->datum = ($_GET['mesic']&&$_GET['rok'])
             ? DateTime::createFromFormat('j-n-Y', '1-'.$_GET['mesic'].'-'.$_GET['rok'])
             : DateTime::createFromFormat('j', '1');
    }

    /*
     * funkce, která vrací pole posledních dnů předchozího měsíce, než který je
     * zadán, do prvního dne v prvním týdnů daného měsíce
     */
    private function  predchoziMesic()
    {
        $pocetDnu = $this->datum->format('N')-2;//kolik dnu je treba doplnit

        $predchozi = array();//pole ke vraceni
        for($i =$this->datum->modify('-1 month')->format('t') - $pocetDnu ;$i<=$this->datum->format('t');$i++ )
        {
            array_push($predchozi,'<del>'.$i.'</del>');
        }
        $this->datum->modify('+1 month');//kvuli poslednimu dnu predchozi mesice jsem snizil datum o jeden mesic, takze ho musim vratit zpet (reference)
        return $predchozi;
     }

     /*
     * funkce, která vrací pole prvních dnů dalšího měsíce (do konce posledního týdne
     * zadaného měsíce
     * bere hodnotu kolik dní je třeba vrátit
     */
    private function nadchazejiciMesic($kolikDni)
    {
       $nasledujici = array(); //pole ke vraceni
        for($i =1 ;$i<=$kolikDni;$i++ )
        {
            array_push($nasledujici,'<del>'.$i.'</del>');
        }
        return $nasledujici;
     }

     /*
      * vraci udaje do GET pro odkaz na předchozí nebo následující měsíc
      */
     private function odkazy()
    {
        $odkazy = array(); //pole ke vrácení
        if ($this->datum->format('n') >1){
            $odkazy[0] = $this->datum->format('n') -1;// předchozí měsíc
            $odkazy[1] = $this->datum->format('Y');//rok předchozího měsíce
        }
        else {
            $odkazy[0] = 12;// předchozí měsíc
            $odkazy[1] = $this->datum->format('Y')-1;//rok předchozího měsíce
        }

        if ($this->datum->format('n') <12){
            $odkazy[2] = $this->datum->format('n') +1;// následující měsíc
            $odkazy[3] = $this->datum->format('Y');//rok následujícího měsíce
        }
        else {
            $odkazy[2] = 1;// následující měsíc
            $odkazy[3] = $this->datum->format('Y')+1;//rok následujícího měsíce
        }
        return $odkazy;
    }
    /*
     *vrací měsíc česky
     */
    private function mesicCesky(){
        $mesice = array('leden', 'únor', 'březen', 'duben', 'květen', 'červen',
    'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec');
        return $mesice[$this->datum->format('n') - 1];
    }

    /*
     * funkce které to dává všechno dohromady, vkládá dny zadaného měsíce a taky zajišťuje výpis
     */
    public function zobraz(){
        $tabulka = array($this->predchoziMesic($this->datum));//vložení dnů předchozího měsíce

        //vkládání dnů do tabulky
        $den = 1;//počitají se a vypisují se přes něj dny měsíce
        for($i = 0; $den<= $this->datum->format('t'); $i++ )//počítadlo pro řádky v $tabulka
        {
                        echo ("<span style=\"display: none;\">");
            for($j = count($tabulka[$i]); $j <7&&$den<= $this->datum->format('t');$j++)//počítadlo pro sloupce v $tabulka, kontroluje, jestli už není poslední den
            {
                $tabulka[$i][$j] = $den++;//vpisuje den
            }
                        echo ("</span>");
        }

        //vkládá první dny následujícího měsíce
        $tabulka[count($tabulka)-1] = array_merge_recursive(
                $tabulka[count($tabulka)-1],
                $this->nadchazejiciMesic(7-count($tabulka[count($tabulka)-1])));

        //vytvoření matice kvuli vypisu
        $matice = new Matice($tabulka);
        $matice = $matice->doHtmlTabulky(FALSE);//vložení do proměnné hotový výstup těla tabulky
        $odkazy = $this->odkazy();//uložení hodnot odkazů
        $nadpis = $this->mesicCesky().' '.$this->datum->format('Y');//vytvoření nadpisu - měsíc a rok
        //formátování
        return <<<EOT
<table>
    <thead>
         <tr>
                <th><a href="index.php?mesic=$odkazy[0]&rok=$odkazy[1]"><</a></th>
                <th colspan="5">$nadpis</th>
                <th><a href="index.php?mesic=$odkazy[2]&rok=$odkazy[3]">></a></th>
         </tr>
         <tr>
                <th>Po</th>
                <th>Út</th>
                <th>St</th>
                <th>Čt</th>
                <th>Pá</th>
                <th>So</th>
                <th>Ne</th>
         </tr>
    </thead>
    <tbody>
         $matice
    </tbody>
 </table>

EOT;

}

    }

?>
 
Odpovědět 28. května 11:30
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 5 zpráv z 5.