Как я могу использовать JSON-кодированный массив без URL? - PullRequest
0 голосов
/ 05 июня 2011

Привет! Я использую fullCalendar 1.5.1 и создал PHP-запрос, который возвращает почти все, что я хочу использовать в календаре.Это интегрированная система, поэтому мне пришлось переключиться на _ASSOC, чтобы вернуть только ассоциативный массив MySQLi:

<?php 
global $json_result;
global $myqueryresult;
$GLOBALS["ADODB_FETCH_MODE"] = ADODB_FETCH_ASSOC;
$myquery = "SELECT id, title, eventstart, eventend FROM View1";
$myqueryresult = $GLOBALS["conn"]->GetAll($myquery);
$json_result = json_encode($myqueryresult);
$GLOBALS["ADODB_FETCH_MODE"] = ADODB_FETCH_BOTH;
?>

... за исключением того, что он не будет принимать данные, поскольку ключ в ключе / значениипары указаны (согласно стандартам JSON, поэтому я прочитал).

Если я просто введу результирующий массив MySQL, Javascript просто отобразит данные как «Массив».Если я использую json_encode () в массиве, я получаю то, что выглядит как правильный объект JSON, но он не работает с fullCalendar из-за цитирования ключей.

Вот мой jQuery для полного календаря:

$(document).ready(function() {                            
    $('#calendar').fullCalendar({          
    height: 600,
    firstDay: 6,
    theme: true,
    year: 2012,
    month: 0,                      
    date: 7,                      
    minTime: 6,
    maxTime: 23,
    startParam: 'eventstart',
    endParam: 'eventend',
    defaultView: 'agendaWeek',        
    allDaySlot: false,
    slotMinutes: 15,                      
    events: <?php echo $json_result; ?>

        // put your options and callbacks here
    })
}); 

Вот сгенерированный источник HTML, если я использую массив MySQL для $ json_result:

    $(document).ready(function() {                            
        $('#calendar').fullCalendar({          
<...snip...>
        slotMinutes: 15,                      
        events: Array
            // put your options and callbacks here
        })
    });

А вотрезультат, если я использую json_encode ($ thesamearray)

    $(document).ready(function() {                            
<...snip...>                    
        events: [{"id":"51","title":"Ship in Miami, Florida","eventstart":"2012-01-07 07:00:00","eventend":"2012-01-07 15:00:00"},{"id":"547","title":"Miami, Florida","eventstart":"2012-01-14 07:00:00","eventend":null}]
            // put your options and callbacks here
        })
    });

Как я могу настроить это так, чтобы оно работало как массив в fullCalendar?Кажется, он не хочет брать строку JSON или массив, по крайней мере в том формате, в котором массив находится сейчас из PHP.

Спасибо, Крис

РЕШЕНИЕ:

Псевдоним поля MySQL:

<?php 
global $json_result;
$GLOBALS["ADODB_FETCH_MODE"] = ADODB_FETCH_ASSOC;
$myquery = "SELECT id, title, eventstart AS start, eventend AS end FROM View1";
$myqueryresult = $GLOBALS["conn"]->GetAll($myquery);
$json_result = json_encode($myqueryresult);
$GLOBALS["ADODB_FETCH_MODE"] = ADODB_FETCH_BOTH;
?>

Также настроил jQuery для удаления моих start / endparams и изменил allDaySlot на allDayDefault:

$(document).ready(function() {                            
    $('#calendar').fullCalendar({          
    height: 600,
    firstDay: 6,
    theme: true,
    year: 2012,
    month: 0,                      
    date: 7,                      
    minTime: 6,
    maxTime: 23,
    defaultView: 'agendaWeek',        
    allDayDefault: false,
    slotMinutes: 15,                      
    events: <?php echo $json_result; ?>

        // put your options and callbacks here
    })
});

Теперь, еслиЯ мог только найти способ заставить его показать 8-дневную горизонтальную повестку дня, мои проблемы могли быть закончены!Спасибо всем за советы.

Ответы [ 2 ]

1 голос
/ 05 июня 2011

Согласно документации для Event Object дата начала обязательна и должна быть указана как свойство с именем start - вы используете имя eventstart

Обратите внимание, что в соответствии с документами startParam и endParam являются параметрами для параметра подачи JSON для событий и, по-видимому, не изменяют имя свойства используется для времени начала и окончания.


Обновление 1

Я немного поиграл с этим и несколько нелогично, если только вы не укажете allDay: false в качестве свойства для события, даже если он имеет определенный диапазон времени, он отображается в слоте на весь день вверху календарь, который вы отключили с помощью allDaySlot: false. Вот рабочий пример , использующий почти все ваши исходные настройки.


Обновление 2

Из вашего комментария к ответу Мэтта и из документации я вижу, что глобальное значение по умолчанию для свойства allDay наследуется от свойства allDayDefault, которое по умолчанию true. Таким образом, передавая allDayDefult: false в ваших опциях fullCalendar(), вы избегаете необходимости указывать allDay: false для каждого события в отдельности. Вот обновленная скрипка . . Обратите внимание, что вам не нужно избавляться от allDaySlot, который просто указывает, отображается ли верхняя часть слота, отображающего события за весь день.

0 голосов
/ 09 июня 2011
<?
$username = "root";
$password = "";
$hostname = "localhost"; 
$dbhandle = mysql_connect($hostname, $username, $password)
  or die("Unable to connect to MySQL");
  $selected = mysql_select_db("db_name",$dbhandle)
  or die("Could not select examples");
  $sql = 'SELECT * from schedule';
  $result = mysql_query($sql);
   $events = array();
while ($row = mysql_fetch_assoc($result)) {
    $eventsArray = array();
    $eventsArray['id'] =  $row['idschedule'];
    $eventsArray['title'] = $row['schedule_name'];
    $eventsArray['start'] = $row['date_start']. " " . $row['time_start'];
    $eventsArray['end'] = $row['date_end']. " ".$row['time_end'];

   if($all==true)
    {
        $vall = str_replace('}',',"allDay":true}',json_encode($eventsArray));
    }
    else
    {
        $vall = str_replace('}',',"allDay":false}',json_encode($eventsArray));
    }
    $events[] = trim($vall); 
}  
$val = implode($events);
$val2 = str_replace('}','},',$val);

?>

Затем передайте это в событиях, подобных этому

events: [<?=$val2?>],

, и это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...