Knihovna Zap Cal je open source knihovna PHP pro čtení a zápis souborů iCalendar. Knihovna se vyvíjí více než 10 let a podporuje program Zap Calendar, open source aplikaci pro CMS Joomla a v poslední době projekt validátoru iCalendar na webových stránkách. Nyní je k dispozici jako samostatná knihovna pro vývojáře PHP.

Zap Calendar iCalendar Library je PHP knihovna pro podporu standardu iCalendar (RFC 5545). Knihovna obsahuje několik příkladů čtení a zápisu souborů iCalendar

Tato knihovna PHP je určena pro čtení a zápis kanálů a souborů ve formátu iCalendar. Mezi vlastnosti knihovny patří:

  • Podpora čtení A zápisu pro soubory iCalendar
  • Objektově založená tvorba a manipulace se soubory iCalendar
  • Podporuje rozšíření RRULE na seznam opakujících se dat
  • Podporuje přidávání informací o časovém pásmu do souboru iCalendar

Všechna data iCalendar jsou uložena ve stromu objektů PHP. To umožňuje přidání jakékoli vlastnosti do zdroje iCalendar bez nutnosti volání specializovaných funkcí knihovny. S mocí přichází zodpovědnost. Chybějící nebo neplatné vlastnosti mohou způsobit, že výsledný soubor iCalendar bude neplatný.

Zde je příklad programu PHP pro vytvoření jednoho souboru události iCalendar:

$title = "(!LANG:Simple Event"; // date/time is in SQL datetime format $event_start = "2020-01-01 12:00:00"; $event_end = "2020-01-01 13:00:00"; // create the ical object $icalobj = new ZCiCal(); // create the event within the ical object $eventobj = new ZCiCalNode("VEVENT", $icalobj->curnode); // add title $eventobj->addNode(new ZCiCalDataNode("SUMMARY:" . $title)); // add start date $eventobj->addNode(new ZCiCalDataNode("DTSTART:" . ZCiCal::fromSqlDateTime($event_start))); // add end date $eventobj->addNode(new ZCiCalDataNode("DTEND:" . ZCiCal::fromSqlDateTime($event_end))); // UID is a required item in VEVENT, create unique string for this event // Adding your domain to the end is a good way of creating uniqueness $uid = date("Y-m-d-H-i-s") . "@demo.. $uid)); // DTSTAMP is a required item in VEVENT $eventobj->addNode(new ZCiCalDataNode("DTSTAMP:" . ZCiCal::fromSqlDateTime())); // Add description $eventobj->addNode(new ZCiCalDataNode("Description:" . ZCiCal::formatContent("This is a simple event, using the Zap Calendar PHP library. " .."))); // write iCalendar feed to stdout echo $icalobj->export();!}

V předvečer nového roku vyvstal velmi triviální úkol - vytvořit kalendářovou stránku, kde bylo pro každý měsíc nutné zobrazit kalendář na měsíc. Prvním krokem k řešení problému bylo hledání hotových řešení. Po protřídění tuctu řešení uvedených na internetu došlo k výběru. Některé verze se ukázaly jako nefunkční vůbec, některé byly příliš těžkopádné – musely by být pěkně „opilované“, aby bylo dosaženo požadovaného výsledku. Pojďme se tedy podívat, jak napsat jednoduchý kalendář v php.

Základ skriptu se našel na internetu, opravily se chyby, něco se dodělalo, konkrétně přibyla funkcionalita zvýraznění volných dnů samostatnou css třídou.

Implementace měsíčního kalendáře v čistém PHP bez použití mySQL, jQuery atd. je uveden níže:

"; // zobrazení dnů v týdnu $headings = array("Po","Út","St","Čt","Pá","So","Ne"); $calendar.= " "; for($head_day = 0; $head_day<= 6; $head_day++) { $calendar.= ""; $calendar.="

".$headings[$head_day]."
"; $calendar.="";) $calendar.=""; // nastaví začátek týdne na pondělí $running_day = date("w",mktime(0,0,0,$měsíc,1,$rok)); $running_day = $running_day - 1; if ($ running_day == -1) ( $running_day = 6; ) $days_in_month = date("t",mktime(0,0,0,$měsíc,1,$rok)); $day_counter = 0; $days_in_this_week = 1; $dates_array = array(); // první řádek kalendáře $calendar.= " "; // zobrazení prázdných buněk pro ($x = 0; $x< $running_day; $x++) { $calendar.= ""; $days_in_this_week++; ) // se dostali k číslům, zapíšeme je do prvního řádku pro ($list_day = 1; $list_day<= $days_in_month; $list_day++) { $calendar.= ""; // zapište číslo do buňky $calendar.="
".$list_day."
"; $calendar.=""; // dosáhl posledního dne v týdnu if ($running_day == 6) ( // zavře řádek $calendar.= ""; // pokud den není poslední v měsíci, začněte další řádek if (($day_counter + 1) != $days_in_month) ( $calendar.= " "; ) // vynulování počítadel $running_day = -1; $days_in_this_week = 0; ) $days_in_this_week++; $running_day++; $day_counter++; ) // zobrazení prázdných buněk na konci minulého týdne, pokud ($days_in_this_week< 8) { for($x = 1; $x <= (8 - $days_in_this_week); $x++) { $calendar.= " ";)) $calendar.=""; $calendar.=""; return $calendar; ) ?>

Jako vstup obdrží funkce draw_calendar pořadové číslo měsíce a roku. Výsledkem provedení funkce je html-kód kalendáře pro daný měsíc. Použití výše uvedené funkce není složité a zvládne to i začátečník ve vývoji webu. Níže uvedený příklad zobrazí kalendář na leden 2016.

leden "16

Výstup titulku kalendáře, který obsahuje název měsíce a roku, nebyl do funkce záměrně zařazen, aby jej bylo možné libovolně měnit, případně zcela odstranit.

php kalendář na rok

Z výše uvedené funkce můžete snadno získat kalendář php skript na rok a na jakýkoli. K tomu stačí ve smyčce projít všechny měsíce a u každého z nich zavolat funkci pro zobrazení kalendáře na daný měsíc.

V tomto případě však budete muset vytvořit pole se seznamem názvů měsíců v ruštině, protože názvy měsíců z php můžete získat pouze v angličtině.

Kód v tomto případě bude následující:

"leden", 1 => "únor", 2 => "březen", 3 => "duben", 4 => "květen", 5 => "červen", 6 => "červenec", 7 => " srpen", 8 => "září", 9 => "říjen", 10 => "listopad", 11 => "prosinec"); za ($měsíc = 1; $měsíc<= 12; $month++) { ?>

"16

Příklady v tomto příspěvku si můžete stáhnout z github.

14. září 2014

Existují situace, kdy nemůžete použít komponentu vytvořenou v JavaScriptu. Zpravidla se jedná o případy, kdy potřebujete možnost neautomatizovat výběr data v HTML formuláři, ale možnost propojit některé minulé nebo plánované události s daty v budoucnosti. Může se jednat o počet novinek k určitému datu, počet objednaného zboží nebo nákupů uskutečněných v internetovém obchodě apod. Tito. v takových případech je zřejmé, že je potřeba propojení mezi kalendářem a databází za účelem získání určitých informací k určitému datu. Samozřejmě by bylo možné vytvořit kalendář v JavaScriptu a pomocí Ajaxu získat data o přítomnosti určitých událostí, ale jak ukazuje praxe, toto řešení není optimální. Proto bude tato komponenta kalendáře vyvinuta v PHP.

Nastavení stylu kalendáře je obsaženo v souboru kalendář.css. A PHP skript je v souboru kalendářní třída.

Chcete-li pracovat s kalendářem, musíte do modulu, který potřebujete, přidat následující kód:

// Zahrňte modul require_once (název adresáře (__FILE__) . "/calendar.class.php"); // Pole s daty událostí ve formátu Unix $Events = array(1409518800, 1409778000,1410210000,1410901200,1411592400); // Získat datum, pokud $date = (isset($_REQUEST["date"]))? $_REQUEST["datum"] : "" ; // Vytvoření objektu kalendáře $calendar = new Calendar($date, $Events); // Zobrazí echo kalendáře $calendar->ShowCalendar();

Zdrojový kód tohoto kalendáře si můžete upravit podle svých potřeb. Komponentu kalendáře si můžete stáhnout.