【问题标题】:javascript and php on the fly calendarjavascript 和 php 动态日历
【发布时间】:2009-04-01 21:30:28
【问题描述】:

我有一个 javascript 日历的代码,它可以完美地在页面加载时创建它。但是我想知道是否可以向其中添加事件。我找到了一个插件(jQuery),它使用户能够将鼠标悬停在带有“事件”类的 td 上,并且将显示一个事件。因此,由于这个日历不会被我使用,而是被其他对开发一无所知的人使用,我想知道是否有办法制作 php 文件或上传或其他东西,以便她可以上传活动。我的意思是,假设她想要一个在 3 号举行的活动,然后她上传一个文件,php 读取它并告诉 javascript 添加该日期的“事件”类,然后 jQuery 完成其余的工作。是否可以?我什至不知道该怎么做,我真的希望我自己解释一下。这是我的 javascript 顺便说一句。

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>';
}

正如您在此处看到的,它会添加空格,直到到达实际日期。我试图让它检查 if(x is not a number) 然后添加一个 td class="padding" 但是为此我试图使用 x.match(/[0-9]+/) 但它没有t 似乎有效,这也是我第一次尝试将正则表达式与 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>

我不知道为什么会发生这种情况,我只知道它弄乱了代码,因为之后我得到一个 "> 打印(因为这个新的 td 引起的引号不匹配......为什么会发生这种情况?

【问题讨论】:

    标签: php javascript calendar on-the-fly


    【解决方案1】:

    我创建的日历系统使用了完整的月份 php 数组。这样您就可以对其进行迭代,并且对于每个相应的空白日期表格单元格,该日期都有一个空白数组。

    例如

    $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()
                  ...........
      )
    

    我只通过从指定日期和当前星期创建一个数组来构建天数组

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

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

    像魅力一样工作。

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

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

    【讨论】:

    • 问题,你建议我像你在这里展示的那样添加 php 或者我完全在 php 中完成?
    • 看看你的javascript,你最好把它全部用php。显示日期的 JQuery 函数就是您在 javascript 中所需要的。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-08-11
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多