javascript和php在飞行日历上

时间:2009-04-01 21:30:28

标签: php javascript calendar on-the-fly

我有一个javascript日历的代码,它在页面加载时创建它时效果很好。但是我想知道是否可以向它添加事件。我找到了一个插件(jQuery),它允许用户将鼠标悬停在带有“event”类的td上,并显示一个事件。所以,由于这个日历不会被我使用,而是由其他对开发一无所知的人使用,我想知道是否有办法制作php文件或上传或其他东西,以便她可以上传事件。我的意思是,让我们说她想要一个事件在3号然后她上传一个文件php读取它并告诉javascript添加类“事件”日期和jQuery完成其余的事情。可能吗?我甚至无法弄明白该怎么做,我真的希望自己解释一下。这是我的javascript btw。

function buildCal(){
    var d = new Date();
    var month = d.getMonth()+1;
    var year = d.getFullYear();
    var monthName=['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];
    var daysInMonth=[31,0,31,30,31,30,31,31,30,31,30,31];

    var objectDay = new Date(year, month-1, 1); //fix date bug when current day is 31st
    objectDay.od=objectDay.getDay()+1; //fix date bug when current day is 31st

    var todaydate=new Date() 
    var scanfortoday=(year==todaydate.getFullYear() && month==todaydate.getMonth()+1)? todaydate.getDate() : 0 //DD added

    daysInMonth[1]=(((objectDay.getFullYear()%100!=0)&&(objectDay.getFullYear()%4==0))||(objectDay.getFullYear()%400==0))?29:28;

    var t='<div class="main"><table class="main" cols="7" cellpadding="0" border="0" cellspacing="0">';
    t+='<h3 class="monthCSS" align="center">'+monthName[month-1]+' - '+year+'</h3><tr align="center">';


    for(s=0;s<7;s++)t+='<td class="daysofweek">'+"DoLuMaMiJuViSa".substr(s*2,2)+'</td>';

    t+='</tr><tr align="center">';
    for(i=2;i<=42;i++){
        var x=((i-objectDay.od>=0)&&(i-objectDay.od<daysInMonth[month-1]))? i-objectDay.od+1 : '&nbsp;';
            if (x==scanfortoday)
                x='<td class="today">'+x+'</td>'
            t+='<td class="days">'+x+'</td>';
        if(((i)%7==0)&&(i<36))t+='</tr><tr align="center">';
    }
    return t+='</tr></table></div>';
}

其他东西,正如你在这里看到的那样,它会增加空白空间直到达到实际日期。我试图让它检查是否(x不是数字)然后添加一个td class =“padding”然而为了做到这一点我试图使用x.match(/ [0-9] + /)但它没有'似乎工作,这也是我第一次尝试使用javascript的正则表达式,任何人都知道为什么这是错的?或者如何实际检查它?


修改

这个脚本发生了奇怪的事情,我不知道为什么,我试图改变

t+='<td class="days">'+x+'</td>';

t+='<td class="days' + x +'">'+x+'</td>';

这个,所以我可以选择每个td,但是当我这样做时,会生成一个包含

的新td
<td id="days&lt;td class=" today="">1</td>

我不知道为什么会发生这种情况,我只知道它正在弄乱代码,因为之后我得到了一个“&gt;打印(因为这个新的td造成的引号不匹配......为什么会发生这种情况?< / p>

2 个答案:

答案 0 :(得分:0)

我创建的日历系统使用了当月的完整php数组。这样你就可以遍历它,并且对于每个相应的空白日表单元格,当天都有一个空白数组。

e.g。

$calendar_dates = array(
              [week_1] = array(
                     [sun] = Null
                     [mon] = NULL
                     [tue] = array(
                            [events] = array(
                                    event_id => 'event name'
                                    event_name => ''
                                    event_time => ''
                             )
                     [wed]
                     ...
                 )
              [week_1] => array()
              ...........
  )

我通过从指定的日期和当前周创建数组来构建days数组

然后我点击数据库以获取该范围内的事件

然后循环浏览事件并将它们附加到日历数组中。

就像魅力一样。

要让它与javascript一起工作,只需在html文件的头部回显一些特定的javascript来控制日历日的开启和关闭。

为客户提供一个简单的登录页面,用于在网络表单中输入/编辑事件。

答案 1 :(得分:0)

听起来您想要将事件数据从服务器推送到包含日历的网页。虽然这是可能的,但这很困难,而且通常不值得付出努力。您最好在日历中构建一些AJAX,并每隔5或10分钟左右轮询服务器以查看事件更新。这将在上传新事件和在日历上显示这些事件之间引入一些延迟,但会更容易开发。