Biblioteka Zap Cal to biblioteka PHP o otwartym kodzie źródłowym do odczytu i zapisu plików iCalendar. Biblioteka jest rozwijana od ponad 10 lat, wspierając program Zap Calendar, aplikację typu open source dla Joomla CMS, a ostatnio projekt walidatora iCalendar na stronie internetowej. Jest teraz dostępna jako samodzielna biblioteka dla programistów PHP.

Biblioteka Zap Calendar iCalendar to biblioteka PHP obsługująca standard iCalendar (RFC 5545). Biblioteka zawiera kilka przykładów odczytywania i zapisywania plików iCalendar

Ta biblioteka PHP służy do odczytywania i zapisywania kanałów i plików w formacie iCalendar. Cechy biblioteki to m.in.

  • Obsługa odczytu i zapisu plików iCalendar
  • Obiektowe tworzenie i manipulowanie plikami iCalendar
  • Obsługuje rozszerzenie RRULE do listy powtarzających się dat
  • Obsługuje dodawanie informacji o strefie czasowej do pliku iCalendar

Wszystkie dane iCalendar są przechowywane w drzewie obiektów PHP. Pozwala to na dodawanie dowolnej właściwości do kanału informacyjnego iCalendar bez konieczności wywoływania specjalistycznych funkcji bibliotecznych. Z władzą wiąże się odpowiedzialność. Brakujące lub nieprawidłowe właściwości mogą spowodować, że wynikowy plik iCalendar będzie nieprawidłowy.

Oto przykład programu PHP do tworzenia pojedynczego pliku zdarzenia iCalendar:

$title = "Proste zdarzenie"; // 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();!}

W przeddzień nowego roku pojawiło się bardzo trywialne zadanie - zrobić stronę kalendarza, w której dla każdego miesiąca trzeba było wyświetlić kalendarz na miesiąc. Pierwszym krokiem w rozwiązaniu problemu było poszukiwanie gotowych rozwiązań. Po przejrzeniu kilkunastu rozwiązań podanych w Internecie wybór został dokonany. Niektóre wersje okazywały się w ogóle nie działać, niektóre były zbyt nieporęczne - trzeba by je nieźle „odpiłować”, aby uzyskać pożądany efekt. Przyjrzyjmy się więc, jak napisać prosty kalendarz w php.

Podstawa skryptu została znaleziona w Internecie, błędy zostały poprawione, coś zostało uzupełnione, w szczególności dodano funkcjonalność podświetlania dni wolnych oddzielną klasą css.

Implementacja kalendarza miesięcznego w czystym PHP bez użycia mySQL, jQuery itp. podano poniżej:

"; // wyświetl dni tygodnia $headings = array("Pon","Tue","Środa","Czw."Pt","Sob","Nd"); $calendar.= " "; for($head_day = 0; $head_day<= 6; $head_day++) { $calendar.= ""; $kalendarz.= "

".$nagłówki[$nagłówek_dzień]."
"; $kalendarz.= ""; ) $kalendarz.= ""; // ustaw początek tygodnia na poniedziałek $running_day = date("w",mktime(0,0,0,$month,1,$year)); $running_day = $running_day - 1; if ($ bieżący_dzień == -1) ( $bieżący_dzień = 6; ) $dni_w_miesiącu = date("t",mktime(0,0,0,$miesiąc,1,$rok)); $licznik_dni = 0; $dni_w_tym_tygodniu = 1; $dates_array = array(); // pierwszy wiersz kalendarza $calendar.= " "; // wyświetl puste komórki dla ($x = 0; $x< $running_day; $x++) { $calendar.= ""; $days_in_this_week++; ) // doszliśmy do liczb, zapiszemy je w pierwszym wierszu for($list_day = 1; $list_day<= $days_in_month; $list_day++) { $calendar.= ""; // wpisz liczbę do komórki $calendar.= "
".$ lista_dzień."
"; $kalendarz.= ""; // osiągnięto ostatni dzień tygodnia if ($running_day == 6) ( // zamknij linię $calendar.= ""; // jeśli dzień nie jest ostatnim dniem miesiąca, rozpocznij następną linię if (($day_counter + 1) != $days_in_month) ( $calendar.= " "; ) // zresetuj liczniki $running_day = -1; $days_in_this_week = 0; ) $days_in_this_week++; $running_day++; $day_counter++; ) // wyświetl puste komórki na koniec ostatniego tygodnia if ($days_in_this_week< 8) { for($x = 1; $x <= (8 - $days_in_this_week); $x++) { $calendar.= " "; ) ) $kalendarz.= ""; $kalendarz.= ""; zwróć $kalendarz; ) ?>

Jako dane wejściowe funkcja draw_calendar otrzymuje liczbę porządkową miesiąca i roku. Wynikiem działania funkcji jest kod html kalendarza na dany miesiąc. Korzystanie z powyższej funkcji nie jest trudne, a nawet początkujący w tworzeniu stron internetowych może to zrobić. Poniższy przykład wyświetli kalendarz na styczeń 2016 r.

Styczeń "16

Wyjście podpisu kalendarza, który zawiera nazwę miesiąca i roku, celowo nie zostało uwzględnione w funkcji, aby można było je dowolnie zmieniać, a być może całkowicie usunąć.

kalendarz php na rok

Z powyższej funkcji możesz łatwo uzyskać skrypt php kalendarza na rok i na dowolny. Aby to zrobić, wystarczy przejść przez wszystkie miesiące w pętli i wywołać funkcję wyświetlania kalendarza na miesiąc dla każdego z nich.

Jednak w tym przypadku będziesz musiał utworzyć tablicę z listą nazw miesięcy w języku rosyjskim, ponieważ nazwy miesięcy można uzyskać tylko z php w języku angielskim.

Kod w tym przypadku będzie następujący:

"Styczeń", 1 => "Luty", 2 => "Marzec", 3 => "Kwiecień", 4 => "Maj", 5 => "Czerwiec", 6 => "Lipiec", 7 => " sierpień", 8 => "wrzesień", 9 => "październik", 10 => "listopad", 11 => "grudzień"); dla ($miesiąc = 1; $miesiąc<= 12; $month++) { ?>

"16

Możesz pobrać przykłady w tym poście z github.

14 września 2014 r

Są sytuacje, w których nie można użyć komponentu stworzonego w JavaScript. Z reguły są to przypadki, w których potrzebna jest możliwość nie automatyzacji wyboru daty w formularzu HTML, ale możliwość powiązania niektórych przeszłych lub planowanych wydarzeń z datami w przyszłości. Może to być ilość nowości w danym dniu, ilość zamówionych towarów lub dokonanych zakupów w sklepie internetowym itp. Te. w takich przypadkach staje się oczywiste, że istnieje potrzeba połączenia kalendarza z bazą danych w celu uzyskania określonych informacji na określoną datę. Oczywiście dałoby się stworzyć kalendarz w JavaScript i wykorzystać Ajax do pozyskiwania danych o obecności określonych wydarzeń, ale jak pokazuje praktyka, takie rozwiązanie nie jest optymalne. Dlatego ten komponent kalendarza zostanie opracowany w PHP.

Ustawienia stylu dla kalendarza są zawarte w pliku kalendarz.css. A skrypt PHP jest w pliku klasa kalendarza.

Aby pracować z kalendarzem, musisz dodać następujący kod do potrzebnego modułu:

// Dołącz moduł require_once (dirname (__FILE__) . "/calendar.class.php"); // Tablica z datami zdarzeń w formacie uniksowym $Events = array(1409518800, 1409778000,1410210000,1410901200,1411592400); // Pobierz datę, jeśli $date = (isset($_REQUEST["date"]))? $_REQUEST["data"]: ""; // Utwórz obiekt kalendarza $calendar = new Calendar($date, $Events); // Wyświetl kalendarz echo $calendar->ShowCalendar();

Możesz modyfikować kod źródłowy tego kalendarza zgodnie ze swoimi potrzebami. Możesz pobrać komponent kalendarza.