Introduction

Introduction – Ce que peut faire Calendar

Introduction

Quelques classes de PEAR::Calendar requièrent PEAR::Date. Il manque quelques fichiers à la version 1.3.1beta de PEAR::Date, ce qui fait qu'elle ne fonctionne pas. Assurez-vous d'avoir PEAR::Date 1.4 ou supérieure d'installé.

PEAR::Calendar est un paquet pour générer des calendriers en tant que structures de données. Il ne formate rien et ne se base sur aucune couche d'abstraction, ce qui permet de l'utiliser dans différents cas. En même temps, ce paquet fournit une API facile d'utilisation qui rend le formattage facile, par exemple un calendrier HTML, tout en permettant de "connecter" le calendrier à votre couche d'abstraction.

PEAR::Calendar a été développé à cause de l'absence d'alternatives en PHP. Il existe plusieurs classes / utilitaires mais elles sont toutes dédiée à un rendu spécifique (typiquement du HTML avec des possibilités limitées de personnalisation sans avoir à retoucher le code) et dépendent souvent sur un type particulier de données (comprendre MySQL). Cela pose de grosses restrictions sur les cas où elles peuvent être appliquées. Par contraste, PEAR::Calendar se borne à éliminer les calculs de la génération de calendriers, permettant à l'utilisateur final de traverser simplement une structure de données préparée.

Quelques bénéfices / fonctionnalités de PEAR::Calendar :

  • Vous pouvez obtenir le rendu que vous voulez (comme du (X)HTML, WML, SOAP, XML-RPC, ASCII en ligne de commande ou ce que vous voulez).

  • Générer un calendrier devient aussi simple que boucler sur le résultat d'une requête SQL.

  • Tous les "objets date" sont traités de l'année à la seconde (cela signifie que vous pouvez générer un calendrier complet de l'année avec des mois et des jours tout comme vous pouvez générer un "agenda par semaine / jour")

  • Permet de générer des calendriers "tabulaires" facilement.

  • Toute date peut facilement être validée (est-ce que le 29 Fév 2003 est valide ?).

  • Fonctionne bien avec de gros nombres et des API orientées objet.

  • La navigation dans les calendriers est facile (fournir un lien du 1er Janvier 2004 au 31 décembre 2004 n'est pas un problème).

  • Il retourne des valeurs numériques pour toutes les opérations, ce qui signifie que vous n'êtes pas obligés d'utiliser les noms anglais pour les mois par exemple. Vous les générerez vous-mêmes avec des fonctions PHP telles que strftime() et setlocale().

  • La représentation des dates peut être obtenue sous un format lisible par l'homme, ou en tant que timestamp Unix, selon le moteur de calendrier que vous utilisez.

  • Vous pouvez ajouter vos propres fonctionnalités au calendrier en créant des Decorators.

  • Vous permet d'écrire des applications N-tierces, avec des couches.

  • Le "moteur de calcul" du calendrier est abstrait, ce qui signifie que vous n'êtes pas obligés d'utiliser le calendrier Gregorien - vous pouvez écrire un calendrier Tolkiénien si vous voulez. Actuellement, des "moteurs" basés sur Unixtimestamps (par défaut) et PEAR::Date ont été implémentés.

Un exemple simple

<?php
require_once 'Calendar/Month.php';

$Month = new Calendar_Month(200310); // October 2003

$Month->build(); // Construire les jours du mois

// On boucle dans les jours..
while ($Day $Month->fetch()) {
    echo 
$Day->thisDay(), '<br />';
}
?>

Note : il y'a plusieurs exemples complets fournis avec le paquet PEAR::Calendar.

Calendrier (Previous) Comment installer PEAR::Calendar (Next)
Last updated: Sun, 29 Aug 2010 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

Note by: jacob-nospam@keystreams.com
function siteMapDailyDeals($startyear = 1999)
{

$html = '';

for ($year = $startyear; $year <= date('Y'); $year++) {

$months = new Calendar_Year($year);
$months->build();

$html .= '<ul>';
while($month = $months->fetch()) {

if (date('Ym', $month->thisMonth(true)) <= date('Ym')) {

$html .= '<li>' . date('F, Y', $month->thisMonth(true)) . '</li>';

$days = new Calendar_Month($month->thisYear(), $month->thisMonth());
$days->build();

$html .= '<ul>';
while ($day = $days->fetch()) {

if (date('Ymd', $day->thisDay(true)) > date('Ymd')) return $html; // we've hit the last day (today)

$html .= '<li>' . date('F jS, D', $day->thisDay(true)) . '</li>';

}

$html .= '</ul>';

}

}

$html .= '</ul>';

}


return $html;

}

echo siteMapDailyDeals();

This displays:

# January, 1999

* January 1st, Fri
* January 2nd, Sat
* January 3rd, Sun
* January 4th, Mon
* January 5th, Tue
* January 6th, Wed
* January 7th, Thu
* January 8th, Fri
* January 9th, Sat
* January 10th, Sun
* January 11th, Mon... and so on until the current date