Вопрос

У меня есть код для календаря javascript, и он отлично работает, поскольку создает его при загрузке страницы.Однако мне было интересно, возможно ли добавить к нему события.Я нашел плагин (jQuery), который позволяет пользователю навести курсор мыши на td с классом "event", и событие будет отображено.Итак, поскольку этот календарь буду использовать не я, а кто-то другой, кто ничего не смыслит в разработке, мне было интересно, есть ли способ создать php-файл или загрузить что-то еще, чтобы она могла загрузить событие.Я имею в виду, допустим, она хочет событие 3-го числа, затем она загружает файл, php считывает его и сообщает javascript добавить класс "event" к этой дате, а 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>';
}

Что-то еще, как вы можете видеть здесь, добавляет пробелы до тех пор, пока не дойдет до фактической даты.Я пытался заставить его проверить, является ли (x не числом), затем добавить td class ="padding", однако для этого я пытался использовать x.match(/[0-9] + /), но, похоже, это не сработало, и это также будет первый раз, когда я пытаюсь использовать regex с 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>

Я понятия не имею, почему это происходит, я просто знаю, что это связано с кодом, потому что после этого я получаю "> printed (из-за неправильного совпадения кавычек, вызванного этим новым td...почему это происходит?

Это было полезно?

Решение

Календарные системы, которые я создал, используют полный php-массив месяца.таким образом, вы можете выполнить итерацию по нему, и для каждой соответствующей пустой ячейки таблицы day будет создан пустой массив за день.

например ,

$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, просто заставьте его отображать некоторый конкретный javascript в заголовке html-файла, который управляет открытием и закрытием календарных дней.

предоставьте вашему клиенту простую страницу входа в систему для ввода / редактирования событий в веб-форме.

Другие советы

Похоже, вы хотите отправить данные о событиях с сервера на свою веб-страницу, содержащую календарь.Хотя это возможно, это сложно и, как правило, не стоит затраченных усилий.Вам было бы лучше встроить какой-нибудь AJAX в свой календарь и опрашивать сервер на предмет обновлений событий каждые 5-10 минут или около того.Это приведет к некоторой задержке между загрузкой новых событий и их отображением в календаре, но будет намного проще в разработке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top