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:
function draw_calendar($month, $year, $action = "none") { $calendar = "
"; $calendar.=" ".$headings[$head_day]." "; $calendar.=" | ";) $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.= "
";)) $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.
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í:
$months = Array(0 =>"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++) { ?>
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.