Output php data into jquery array?

2019-03-05 18:46发布

问题:

I'm creating a timeline using timesheet.js. The data will be input via custom fields in Wordpress. I want to be able to output that php data into the jquery array. Is that possible?

This is my php loop:

<?php if( have_rows('timeline') ):
    while ( have_rows('timeline') ) : the_row();
        echo the_sub_field('start_date');
        echo the_sub_field('end_date');
        echo the_sub_field('description');
        echo the_sub_field('name');
    endwhile;
endif; ?>

Here's the jquery, each time the php loops through I want it to output in the format:

<script type="text/javascript">
jQuery(function($) {
    $(document).ready(function() {    

        new Timesheet('timesheet', 2002, 2013, [
          ['2002', '09/2002', 'A freaking awesome time', 'lorem'],
          ['06/2002', '09/2003', 'Some great memories', 'ipsum'],
          ['2003', 'Had very bad luck'],
          ['10/2003', '2006', 'At least had fun', 'dolor'],
          ['02/2005', '05/2006', 'Enjoyed those times as well', 'ipsum'],
          ['07/2005', '09/2005', 'Bad luck again', 'default'],
          ['10/2005', '2008', 'For a long time nothing happened', 'dolor'],
          ['01/2008', '05/2009', 'LOST Season #4', 'lorem'],
          ['01/2009', '05/2009', 'LOST Season #4', 'lorem'],
          ['02/2010', '05/2010', 'LOST Season #5', 'lorem'],
          ['09/2008', '06/2010', 'FRINGE #1 & #2', 'ipsum']
        ]);

    });
});
</script>

回答1:

It's quite simple to do this, really: just construct the array in php, and echo its json_encoded value:

<?php
$array = array();
if( have_rows('timeline') ) {
    while ( have_rows('timeline') ) : the_row();
        $array[] = array(
            the_sub_field('start_date'),
            the_sub_field('end_date'),
            the_sub_field('description'),
            the_sub_field('name')
        );
    endwhile;
    echo '<script> var theArray = '.json_encode($array).';</script>';
} ?>

Job done, you now have a JS variable called theArray, and its value will be an array of arrays, containing all of the data you need to create new Timesheet('timesheet', 2002, 2013, theArray);



回答2:

Yes, you need to echo <script> tags and you can generate any Javascript you want:

<?php
echo '<script>';
if( have_rows('timeline') ):
    echo 'var foo = ['
    while ( have_rows('timeline') ) : the_row();
        echo '"'.the_sub_field('start_date').'",';
        echo '"'.the_sub_field('end_date').'",';
        echo '"'.the_sub_field('description').'",';
        echo '"'.the_sub_field('name').'"';
    endwhile;
    echo '];';
endif;
echo '</script>';
?>