2015-07-02 5 views
1

Я пытаюсь извлечь данные из базы данных mysql, чтобы создать json-файл для использования с временной шкалой timelinejs. Проблема в том, что файл json должен быть отформатирован определенным образом. Я создал следующий код, который правильно форматирует json, но он вытаскивает только одну запись из моей базы данных (в частности, последнюю запись). Любая помощь, которую вы могли бы предложить, была бы очень признательна!потянув данные mysql для timelinejs?

<?php 
$link = mysql_pconnect("localhost", "root", "********") or die("Could not connect"); 
mysql_select_db("php_test") or die("Could not select database"); 
$rs = mysql_query("SELECT * FROM timelinetest"); 
while($row = mysql_fetch_array($rs, MYSQL_ASSOC)) 
    $object = array 
    ('timeline'=> 
     array(
     'headline'=>'Georgia History Title Page', 
     'type'=>'default', 
     'text'=> 'Testing Overview', 
     'startDate'=>'1700', 
     'asset'=>array('media'=>'titlepagemedia', 'credit'=>'titlepagecredit', 'caption'=>'titlepagecaption'), 
     'date'=>array(array('startDate'=>($row['startDate']), 'endDate'=>($row['endDate']), 'headline'=>($row[  'headline']), 'text'=>($row['text']), 'tag'=>'', 'asset'=>array('media'=>($row['media']), 'credit'=>($row[  'credit']), 'caption'=>($row['caption']))),), 
     'era'=>array(array('startDate'=>'', 'endDate'=>'', 'headline'=>'', 'text'=>'', 'tag'=>'')) 
     ) 
    ); 

$json = json_encode($object); 
file_put_contents("testing.json", $json); 
?> 



<head> 
     <!-- jQuery --> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
     <!-- BEGIN TimelineJS --> 
     <script type="text/javascript" src="http://cdn.knightlab.com/libs/timeline/latest/js/storyjs-embed.js"></script> 
     <script> 
      $(document).ready(function() { 
       createStoryJS({ 
        type:  'timeline', 
        width:  '800', 
        height:  '600', 
        source: 'http://localhost/php_test/timeline_test/testing.json', 
        embed_id: 'my-timeline' 
       }); 
      }); 
     </script> 
     <!-- END TimelineJS --> 

ответ

0

В вашем цикле, пока вы продолжаете назначения (= перезапись) содержимое результирующего вектора $row к тому же (единственном!) Объекта $object. Не будучи знакомы с TimelineJS Я предполагаю, что вы должны создать массив в $object['timeline'], которые вы могли бы сделать с

while($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { 
    $object['timeline'][]=array(
     'headline'=>'Georgia History Title Page', 
     'type'=>'default', 
     'text'=> 'Testing Overview', 
     'startDate'=>'1700', 
     'asset'=>array('media'=>'titlepagemedia', 'credit'=>'titlepagecredit', 'caption'=>'titlepagecaption'), 
     'date'=>array(array(
      'startDate'=>($row['startDate']), 
      'endDate'=>($row['endDate']), 
      'headline'=>($row['headline']), 
      'text'=>($row['text']), 
      'tag'=>'', 
      'asset'=>array('media'=>($row['media']), 
      'credit'=>($row['credit']), 
      'caption'=>($row['caption'])))), 
     'era'=>array(array('startDate'=>'', 'endDate'=>'', 'headline'=>'', 'text'=>'', 'tag'=>'')) 
     ); 
} 

Это, по существу, такой же, как array_push($object['timeline'], ...) и он будет добавлять данные из каждого из строк результата к массив 'timeline' в $object.

Редактировать

Теперь цикл будет заполнять массивы date и era внутри $object['timeline'] (хотя не будет никаких реальных данных в era):

$object=array('timeline'=>array(
    'headline'=>'Georgia History Title Page', 
    'type'=>'default', 
    'text'=> 'Testing Overview', 
    'startDate'=>'1700', 
    'asset'=>array('media'=>'titlepagemedia', 'credit'=>'titlepagecredit', 'caption'=>'titlepagecaption'), 
    'date'=>array(),'era'=>array() 
)); 

while($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { 
    $object['timeline']['date'][]=array(
      'startDate'=>($row['startDate']), 
      'endDate'=>($row['endDate']), 
      'headline'=>($row['headline']), 
      'text'=>($row['text']), 
      'tag'=>'', 
      'asset'=>array('media'=>($row['media']), 
      'credit'=>($row['credit']), 
      'caption'=>($row['caption']))); 
    $object['timeline']['era'][]=array('startDate'=>'', 'endDate'=>'', 'headline'=>'', 'text'=>'', 'tag'=>''); 

} 

Может быть, это поможет?

+0

Благодарим за быстрый ответ! Проблема с этим решением заключается в том, что он повторяет титульную страницу (первый массив), и это предотвращает загрузку временной шкалы. Мне нужно, чтобы массив заголовков был статичным, а затем массивом даты, ресурса и эры в цикле. Я просто не могу понять. – Ambrose

+0

Я все еще узнаю о вашем объекте TimeLine. Это означает, что 'date'-array может быть структурой, которая должна быть заполнена в вашем цикле. Существует «актив» внутри, bzt 'era' определенно находится на том же уровне, что и ваш заголовок, и не может быть закодирован. Я отредактирую свой пост ... – cars10m

+0

Это сработало! Я очень ценю это. Я застрял на этом несколько дней. Я относительно новичок в этом виде кода, и я не понимал, что массив можно разделить так. Итак, последний вопрос. Позже, я хочу, чтобы иметь возможность отображать только определенные даты из базы данных. Могу ли я использовать 'where' и' between' для этого? – Ambrose

Смежные вопросы