2012-04-25 23 views
5

Ho cercato in giro per i calendari che è su PHP, ma tutto ciò che ho cercato sono data time picker.Mostra calendario su php

Ma quello che voglio solo è un semplice calendario che mi mostra la data, senza selezionarli.

Ho solo bisogno del calendario per visualizzare semplicemente come funziona un calendario normale nel nostro sistema operativo, grazie.

C'è qualche modo?

+0

quello che-hanno-si-provato? – hjpotter92

+0

Sta cercando un plug-in per il calendario. – Jack

+0

Penso che il modo migliore sia fare da solo, non troverai mai esattamente ciò di cui hai bisogno e fare un calendario non è poi così difficile. –

risposta

8

Ecco quello che si può usare: http://keithdevens.com/software/php_calendar

<?php 
//http://keithdevens.com/software/php_calendar 
$time = time(); 
$today = date('j', $time); 
$days = array($today => array(null, null,'<div id="today">' . $today . '</div>')); 
$pn = array('&laquo;' => date('n', $time) - 1, '&raquo;' => date('n', $time) + 1); 
echo generate_calendar(date('Y', $time), date('n', $time), $days, 1, null, 0); 

// PHP Calendar (version 2 . 3), written by Keith Devens 
// http://keithdevens . com/software/php_calendar 
// see example at http://keithdevens . com/weblog 
// License: http://keithdevens . com/software/license 

function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 0, $pn = array()) 
{ 
    $first_of_month = gmmktime(0, 0, 0, $month, 1, $year); 
    // remember that mktime will automatically correct if invalid dates are entered 
    // for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998 
    // this provides a built in "rounding" feature to generate_calendar() 

    $day_names = array(); //generate all the day names according to the current locale 
    for ($n = 0, $t = (3 + $first_day) * 86400; $n < 7; $n++, $t+=86400) //January 4, 1970 was a Sunday 
     $day_names[$n] = ucfirst(gmstrftime('%A', $t)); //%A means full textual day name 

    list($month, $year, $month_name, $weekday) = explode(',', gmstrftime('%m, %Y, %B, %w', $first_of_month)); 
    $weekday = ($weekday + 7 - $first_day) % 7; //adjust for $first_day 
    $title = htmlentities(ucfirst($month_name)) . $year; //note that some locales don't capitalize month and day names 

    //Begin calendar . Uses a real <caption> . See http://diveintomark . org/archives/2002/07/03 
    @list($p, $pl) = each($pn); @list($n, $nl) = each($pn); //previous and next links, if applicable 
    if($p) $p = '<span class="calendar-prev">' . ($pl ? '<a href="' . htmlspecialchars($pl) . '">' . $p . '</a>' : $p) . '</span>&nbsp;'; 
    if($n) $n = '&nbsp;<span class="calendar-next">' . ($nl ? '<a href="' . htmlspecialchars($nl) . '">' . $n . '</a>' : $n) . '</span>'; 
    $calendar = "<div class=\"mini_calendar\">\n<table>" . "\n" . 
     '<caption class="calendar-month">' . $p . ($month_href ? '<a href="' . htmlspecialchars($month_href) . '">' . $title . '</a>' : $title) . $n . "</caption>\n<tr>"; 

    if($day_name_length) 
    { //if the day names should be shown ($day_name_length > 0) 
     //if day_name_length is >3, the full name of the day will be printed 
     foreach($day_names as $d) 
      $calendar .= '<th abbr="' . htmlentities($d) . '">' . htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d) . '</th>'; 
     $calendar .= "</tr>\n<tr>"; 
    } 

    if($weekday > 0) 
    { 
     for ($i = 0; $i < $weekday; $i++) 
     { 
      $calendar .= '<td>&nbsp;</td>'; //initial 'empty' days 
     } 
    } 
    for($day = 1, $days_in_month = gmdate('t',$first_of_month); $day <= $days_in_month; $day++, $weekday++) 
    { 
     if($weekday == 7) 
     { 
      $weekday = 0; //start a new week 
      $calendar .= "</tr>\n<tr>"; 
     } 
     if(isset($days[$day]) and is_array($days[$day])) 
     { 
      @list($link, $classes, $content) = $days[$day]; 
      if(is_null($content)) $content = $day; 
      $calendar .= '<td' . ($classes ? ' class="' . htmlspecialchars($classes) . '">' : '>') . 
       ($link ? '<a href="' . htmlspecialchars($link) . '">' . $content . '</a>' : $content) . '</td>'; 
     } 
     else $calendar .= "<td>$day</td>"; 
    } 
    if($weekday != 7) $calendar .= '<td id="emptydays" colspan="' . (7-$weekday) . '">&nbsp;</td>'; //remaining "empty" days 

    return $calendar . "</tr>\n</table>\n</div>\n"; 
} 
?> 

Si tratta di un mini calendario piuttosto semplice. Nessuna funzione di fantasia.

+0

Molto meglio che farlo da zero. –

4

ho scritto solo una di queste con PHP5 + ajax (se siete bisogno di usarlo):

<?php 

class PN_Calendar { 

    public $first_day_of_week = 0; //0 - sunday, 1 - monday 
    public $current_year = null; 
    public $current_month = null; 
    public $current_day = null; 
    public $show_year_selector = true; 
    public $min_select_year = 1991; 
    public $max_select_year = 2045; 
    public $show_month_selector = true; 

    public function __construct($atts = array()) { 
     if (isset($atts['first_day_of_week'])) { 
      $this->first_day_of_week = $atts['first_day_of_week']; 
     } 

     if (!isset($atts['year'])) { 
      $this->current_year = date('Y'); 
     } else { 
      $this->current_year = $atts['year']; 
     } 

     if (!isset($atts['month'])) { 
      $this->current_month = date('m'); 
     } else { 
      $this->current_month = $atts['month']; 
     } 

     if (!isset($atts['day'])) { 
      $this->current_day = date('d'); 
     } else { 
      $this->current_day = $atts['day']; 
     } 
     //*** 
     if (isset($atts['show_year_selector'])) { 
      $this->show_year_selector = $atts['show_year_selector']; 
     } 

     if (isset($atts['show_month_selector'])) { 
      $this->show_month_selector = $atts['show_month_selector']; 
     } 

     if (isset($atts['min_select_year'])) { 
      $this->min_select_year = $atts['min_select_year']; 
     } 

     if (isset($atts['max_select_year'])) { 
      $this->max_select_year = $atts['max_select_year']; 
     } 
    } 

    /* 
    * Month calendar drawing 
    */ 

    public function draw($data = array(), $y = 0, $m = 0) { 
     //*** 
     if ($m == 0 AND $m == 0) { 
      $y = $this->current_year; 
      $m = $this->current_month; 
     } 
     //*** 
     $data['week_days_names'] = $this->get_week_days_names(true); 
     $data['cells'] = $this->generate_calendar_cells($y, $m); 
     $data['month_name'] = $this->get_month_name($m); 
     $data['year'] = $y; 
     $data['month'] = $m; 
     return $this->draw_html('calendar', $data); 
    } 

    private function generate_calendar_cells($y, $m) { 
     $y = intval($y); 
     $m = intval($m); 
     //*** 
     $first_week_day_in_month = date('w', mktime(0, 0, 0, $m, 1, $y)); //from 0 (sunday) to 6 (saturday) 
     $days_count = $this->get_days_count_in_month($y, $m); 
     $cells = array(); 
     //*** 
     if ($this->first_day_of_week == $first_week_day_in_month) { 
      for ($d = 1; $d <= $days_count; $d++) { 
       $cells[] = new PN_CalendarCell($y, $m, $d); 
      } 
      //*** 
      $cal_cells_left = 5 * 7 - $days_count; 
      $next_month_data = $this->get_next_month($y, $m); 
      for ($d = 1; $d <= $cal_cells_left; $d++) { 
       $cells[] = new PN_CalendarCell($next_month_data['y'], $next_month_data['m'], $d, false); 
      } 
     } else { 
      //*** 
      if ($this->first_day_of_week == 0) { 
       $cal_cells_prev = 6 - (7 - $first_week_day_in_month); //checked, is right 
      } else { 
       if ($first_week_day_in_month == 1) { 
        $cal_cells_prev = 0; 
       } else { 
        if ($first_week_day_in_month == 0) { 
         $cal_cells_prev = 6 - 1; 
        } else { 
         $cal_cells_prev = 6 - (7 - $first_week_day_in_month) - 1; 
        } 
       } 
      } 
      //*** 
      $prev_month_data = $this->get_prev_month($y, $m); 
      $prev_month_days_count = $this->get_days_count_in_month($prev_month_data['y'], $prev_month_data['m']); 

      for ($d = $prev_month_days_count - $cal_cells_prev; $d <= $prev_month_days_count; $d++) { 
       $cells[] = new PN_CalendarCell($prev_month_data['y'], $prev_month_data['m'], $d, false); 
      } 

      //*** 
      for ($d = 1; $d <= $days_count; $d++) { 
       $cells[] = new PN_CalendarCell($y, $m, $d); 
      } 
      //*** 
      //35(7*5) or 42(7*6) cells 
      $busy_cells = $cal_cells_prev + $days_count; 
      $cal_cells_left = 0; 
      if ($busy_cells < 35) { 
       $cal_cells_left = 35 - $busy_cells - 1; 
      } else { 
       $cal_cells_left = 42 - $busy_cells - 1; 
      } 
      //*** 
      if ($cal_cells_left > 0) { 
       $next_month_data = $this->get_next_month($y, $m); 
       for ($d = 1; $d <= $cal_cells_left; $d++) { 
        $cells[] = new PN_CalendarCell($next_month_data['y'], $next_month_data['m'], $d, false); 
       } 
      } 
     } 
     //*** 
     return $cells; 
    } 

    public function get_next_month($y, $m) { 
     $y = intval($y); 
     $m = intval($m); 

     //*** 
     $m++; 
     if ($m % 13 == 0 OR $m > 12) { 
      $y++; 
      $m = 1; 
     } 

     return array('y' => $y, 'm' => $m); 
    } 

    public function get_prev_month($y, $m) { 
     $y = intval($y); 
     $m = intval($m); 

     //*** 
     $m--; 
     if ($m <= 0) { 
      $y--; 
      $m = 12; 
     } 

     return array('y' => $y, 'm' => $m); 
    } 

    public function get_days_count_in_month($year, $month) { 
     return $month == 2 ? ($year % 4 ? 28 : ($year % 100 ? 29 : ($year % 400 ? 28 : 29))) : (($month - 1) % 7 % 2 ? 30 : 31); 
    } 

    public static function get_month_name($m) { 
     $names = self::get_monthes_names(); 
     return $names[intval($m)]; 
    } 

    public function get_week_day_name($num, $shortly = false) { 
     $names = $this->get_week_days_names($shortly); 
     return $names[intval($num)]; 
    } 

    public function get_week_days_names($shortly = false) { 
     if ($this->first_day_of_week == 1) { 
      if ($shortly) { 
       return array(
        1 => 'Mo', 
        2 => 'Tu', 
        3 => 'We', 
        4 => 'Th', 
        5 => 'Fr', 
        6 => 'Sa', 
        7 => 'Su' 
       ); 
      } 

      return array(
       1 => 'Monday', 
       2 => 'Tuesday', 
       3 => 'Wednesday', 
       4 => 'Thursday', 
       5 => 'Friday', 
       6 => 'Saturday', 
       7 => 'Sunday' 
      ); 
     } else { 
      if ($shortly) { 
       return array(
        0 => 'Su', 
        1 => 'Mo', 
        2 => 'Tu', 
        3 => 'We', 
        4 => 'Th', 
        5 => 'Fr', 
        6 => 'Sa' 
       ); 
      } 

      return array(
       0 => 'Sunday', 
       1 => 'Monday', 
       2 => 'Tuesday', 
       3 => 'Wednesday', 
       4 => 'Thursday', 
       5 => 'Friday', 
       6 => 'Saturday' 
      ); 
     } 
    } 

    public static function get_monthes_names() { 
     return array(
      1 => 'January', 
      2 => 'February', 
      3 => 'March', 
      4 => 'April', 
      5 => 'May', 
      6 => 'June', 
      7 => 'July', 
      8 => 'August', 
      9 => 'September', 
      10 => 'October', 
      11 => 'November', 
      12 => 'December' 
     ); 
    } 

    public function draw_html($view, $data = array()) { 
     @extract($data); 
     ob_start(); 
     include('views/' . $view . '.php'); 
     return ob_get_clean(); 
    } 

    } 


class PN_CalendarCell { 

    public $cell_year = null; 
    public $cell_month = null; 
    public $cell_day = null; 
    public $in_current_month = true; 

    public function __construct($y, $m, $d, $in_current_month = true) { 
     $this->cell_year = $y; 
     $this->cell_month = $m; 
     $this->cell_day = $d; 
     $this->in_current_month = $in_current_month; 
    } 

    public function get_week_day_num() { 
     return date('w', mktime(0, 0, 0, $this->cell_month, $this->cell_day, $this->cell_year)); //from 0 (sunday) to 6 (saturday); 
    } 

    public function draw($events) { 
     $this_day_events = 0; 
     if (is_array($events)) { 
      if (isset($events[$this->cell_year][$this->cell_month][$this->cell_day])) { 
       $this_day_events = count($events[$this->cell_year][$this->cell_month][$this->cell_day]); 
      } 
     } else { 
      $events = array(); 
     } 
     ?> 

     <span class="pn_cal_cell_ev_counter" <?php if ($this_day_events <= 0): ?>style="display: none;"<?php endif; ?>><?php echo $this_day_events ?></span> 
     <a data-year="<?php echo $this->cell_year ?>" data-month="<?php echo $this->cell_month ?>" data-day="<?php echo $this->cell_day ?>" data-week-day-num="<?php echo $this->get_week_day_num() ?>" href="javascript:void(0);" class="<?php if ($this->in_current_month): ?>pn_this_month<?php else: ?>other_month<?php endif; ?>"><?php echo $this->cell_day ?></a> 
    } 

} 

script chiamante:

<?php 
    include_once 'classes/calendar.php'; 
    $calendar = new PN_Calendar(); 
    echo $calendar->draw(); 
?> 

Scarica script con demo: http://pluginus.net/archives/simple-free-open-source-ajax-php-calendar-script

Demo: http://2tests.pluginus.net/calendar/

+1

Sei un uomo rock, grazie –

0

Cercavo anche una soluzione semplice, una classe PHP che mi rendesse un calendario mensile in cui aggiungere facilmente eventi.

ho trovato questo PHP Calendario http://coreyworrell.com/calendar/

È necessario creare ancora una vista/template in HTML, ma si può trovare un CSS e versione HTML lì che è possibile utilizzare.

Ed ha anche eventi personalizzati in PHP

$event = $calendar->event() 
    ->condition('timestamp', strtotime('January 2, 2010')) 
    ->title('Hello All') 
    ->output('My Custom Event') 
    ->add_class('custom-event-class'); 
Problemi correlati