2013-11-20 107 views
0

我正在處理簡單的事件日曆。當我第一次加載日曆加載頁面。然後,當我點擊下一個或上一個時,它會將我帶到下一個月,但事件不會加載,並且月份標題不會更改,但會繪製正確的日曆。我嘗試從代碼中取出我的事件腳本,並將其放入控制ajax的函數中,但它不起作用。事件僅在第一次加載時顯示,而不是在點擊下一頁或上一頁後顯示

這是一個鏈接到頁面。 http://hartslogmuseum.com/bookhjr10/cal/final/ajcal3.php (是的,它現在是醜陋的)

有人可以指出我在正確的方向。謝謝。 這是代碼。

<?php 
/* Open up a connection to the mysql database on the same server as website */ 
    $dbhost = ''; 
    $dblogin = ''; 
    $dbpass = '!'; 
    $dbbase = ''; 
    $conn = mysql_connect($dbhost, $dblogin, $dbpass, $dbbase) 
     or die("Unable to connect to mysql database"); 

    function isAjax() { 
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
     $_SERVER ['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'; 
    } 

    if(isAjax() && isset($_POST['month'])) 
    { 
     $month = $_POST['month']; 
     $year = !isset($_POST['year']) ? date('Y', $current_time) : $_POST['year']; 
     $events = array(); 

    die(draw_calendar($month,$year,$events)); 
     die(draw_calendar($month,$year,$events)); 
    } 




    /* Select our database (there is more than one in my server) */ 
    mysql_select_db("", $conn); 


    /* draws a calendar */ 
    function draw_calendar($month,$year,$events = array()){ 
     echo '<div id="calendar_wrapper">'; 

     /* draw table */ 
     $calendar = '<table cellpadding="0" cellspacing="0" class="calendar">'; 

     /* table headings */ 
     $headings = array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'); 
     $calendar.= '<tr class="calendar-row"><td class="calendar-day-head">'.implode('</td><td class="calendar-day-head">',$headings).'</td></tr>'; 

     /* days and weeks vars now ... */ 
     $running_day = date('w',mktime(0,0,0,$month,1,$year)); 
     $days_in_month = date('t',mktime(0,0,0,$month,1,$year)); 
     $days_in_this_week = 1; 
     $day_counter = 0; 
     $dates_array = array(); 

     /* row for week one */ 
     $calendar.= '<tr class="calendar-row">'; 

     /* print "blank" days until the first of the current week */ 
     for($x = 0; $x < $running_day; $x++): 
      $calendar.= '<td class="calendar-day-np">&nbsp;</td>'; 
      $days_in_this_week++; 
     endfor; 

     /* keep going with days.... */ 
     for($list_day = 1; $list_day <= $days_in_month; $list_day++): 
     $calendar.= ''; 
    /* add leading zero in the day number */ 
     if($list_day < 10) { 
      $list_day = str_pad($list_day, 2, '0', STR_PAD_LEFT); 
      } 
    /* add leading zero in the month number */ 
     if($month < 10) { 
      $month = str_pad($month, 2, '0', STR_PAD_LEFT); 
      } 

     $event_day = $year.'-'.$month.'-'.$list_day; 

     $calendar.= '<td class="calendar-day"><div style="position:relative;height:100px;">'; 


     /* add in the day number */ 
       $calendar.= '<div class="day-number">'.$list_day.'</div>'; 

       $event_day = $year.'-'.$month.'-'.$list_day; 
       if(isset($events[$event_day])) { 
        foreach($events[$event_day] as $event) { 
         $calendar.= '<div class="event">'.$event['title'].'</div>'; 
        } 
       } 
       else { 
        $calendar.= str_repeat('<p>&nbsp;</p>',2); 
       } 
      $calendar.= '</div></td>'; 
      if($running_day == 6): 
       $calendar.= '</tr>'; 
       if(($day_counter+1) != $days_in_month): 
        $calendar.= '<tr class="calendar-row">'; 
       endif; 
       $running_day = -1; 
       $days_in_this_week = 0; 
      endif; 
      $days_in_this_week++; $running_day++; $day_counter++; 
     endfor; 

     /* finish the rest of the days in the week */ 
     if($days_in_this_week < 8): 
      for($x = 1; $x <= (8 - $days_in_this_week); $x++): 
       $calendar.= '<td class="calendar-day-np">&nbsp;</td>'; 
      endfor; 
     endif; 

     /* final row */ 
     $calendar.= '</tr>'; 


     /* end the table */ 
     $calendar.= '</table>'; 

     /** DEBUG **/ 
     $calendar = str_replace('</td>','</td>'."\n",$calendar); 
     $calendar = str_replace('</tr>','</tr>'."\n",$calendar); 

     /* all done, return result */ 
     return $calendar; 
    } 

    function random_number() { 
     srand(time()); 
     return (rand() % 7); 
    } 

    /* date settings */ 
    $month = (int) ($_GET['month'] ? $_GET['month'] : date('m')); 
    $year = (int) ($_GET['year'] ? $_GET['year'] : date('Y')); 


    /* "next month" control */ 
    $next_month_link = '<a href="#" class="monthnav" onClick="getNextMonth();return false;">Next &raquo;</a>'; 

    $heading ='<td colspan=5 class="month">$month_name $year</b></td>'; 

    /* "previous month" control */ 
    $previous_month_link = '<a href="#" class="monthnav" onClick="getPrevMonth();return false;">&laquo; Prev</a>'; 


    /* bringing the controls together */ 
    $controls = '<form method="get">'.$select_month_control.$select_year_control.$previous_month_link.$heading.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$next_month_link.' </form>'; 

    /* get all events for the given month 
     I had to rewrite this query to get 
     anything usable out of the mysql 
     database we already had. */ 

    $events = array(); 
    $query = (" 
     SELECT 
     event_title 
     AS title, 
     DATE_FORMAT(FROM_UNIXTIME(event_date), '%Y-%m-%d') 
     AS event_date 
     FROM 
     events 
     WHERE 
     FROM_UNIXTIME(event_date) 
      LIKE '$year-%$month-%'"); 

    /* verify the query is correct 
    echo $query; 
    echo "<hr />"; 
    echo "<br />"; 
    */ 


    $result = mysql_query($query,$conn) or die('error 2'); 
    while($row = mysql_fetch_assoc($result)) { 
     $events[$row['event_date']][] = $row; 

    /* verify that the query gets results. 
     Also generates a list of this months events*/ 
     /*echo $row['event_title']." ----- ".$row['event_date']; 
     echo "<br />";*/ 
    } 

    echo '<h2 style="float:left; padding-right:30px;">'.date('F',mktime(0,0,0,$month,1,$year)).' '.$year.'</h2>'; 
    echo '<div style="float:left;">'.$controls.'</div>'; 
    echo '<div style="clear:both;"></div>'; 
    echo draw_calendar($month,$year,$events); 
    echo '<br /><br />'; 
    echo '</div>'; 

    ?> 


    <html> 
    <head> 
    <link href="cal.css" rel="stylesheet" type="text/css"> 
    <script type="text/javascript" src="proto.js"></script> 
    <script type="text/javascript" language="javascript"> 
     var current_month = <?PHP echo $month ?>; 
     var current_year = <?PHP echo $year ?>; 

     function getPrevMonth() 
     { 
      if(current_month == 1) 
      { 
       current_month = 12; 
       current_year = current_year - 1; 
      } 
      else 
      { 
       current_month = current_month - 1; 
      } 
      params = 'month='+current_month+'&year='+current_year; 
      new Ajax.Updater('calendar_wrapper',window.location.pathname,{method:'post',parameters: params}); 
     } 
      function getNextMonth() 
      { 
       if(current_month == 12) 
       { 
        current_month = 1; 
        current_year = current_year + 1; 
       } 
       else 
       { 
        current_month = current_month + 1; 
       } 
       params = 'month='+current_month+'&year='+current_year; 
       new Ajax.Updater('calendar_wrapper',window.location.pathname,{method:'post',parameters: params}); 
      } 
    </script> 
    </head> 
    <body> 
    <div id="calendar_wrapper"><? /*?PHP draw_calendar($month,$year,$events = array());*/ ?> 

    </body> 
    </html> 
+0

嗨,您發佈的代碼不會包含'$ month_name'定義的部分。這個問題與最近可能出現的$ month_name沒有正確設置有關。看起來像做一些事情:(見答案) –

回答

0

您的發佈代碼未包含'$ month_name'定義的部分。這個問題與最近可能出現的$ month_name沒有正確設置有關。看看做這樣的事情:

function draw_calendar($month,$year,$events = array()){ 

    //set month name 
    $month_name = date("F", mktime(0, 0, 0, $month, 10)); 

    //rest of your code 
0

好吧,我用jQuery和PHP新手,但這裏有幾件事情,我注意到:

1)你每次創建一個第二"calendar_wrapper" DIV你請在致電getNextMonth()getPrevMonth()後重新載入頁面。我對Ajax.Updater不熟悉,Google表明它是Prototype.js,而不是jQuery,對不對?爲了解決這個問題,我的猜測是你不會在Ajax.Updater中使用DOM語法來引用calendar_wrapper。在getNextMonth()/getPrevMonth()Ajax.Updater調用中嘗試"#calendar_wrapper"。如果您正在尋找相當於Ajax.Updater的jQuery,請查看$.ajax()。 2)您的「日期設置」部分的變量在GET全局數組($_GET['month'])中查找,但您的AJAX更新程序通過POST發送數據。這可能是您的PHP腳本正確返回數據的原因,但不能正確更新變量。

3)我沒有看到代碼中的任何內容來選擇月份/年份元素,並使用從您的getPrevMonth()getNextMonth()收到的數據更新它們。爲此,您可能需要一個事件處理程序來使用新數據更新元素。例如,我會給你的第一個h2標頭一個id,然後讓jQuery使用從你的PHP接收到的數據更新h2中的$.text()。但是,看起來您正在尋求在PHP讀取已更新的$month變量時使PHP更新已更新的HTML。如果是這種情況,希望解決這個頁面,使得兩個calendar_wrapper div將解決它。

相關問題