FullCalendar - 如何根据逗号分隔的日期从日历上的数据库(mysql)表行显示事件

Posted

技术标签:

【中文标题】FullCalendar - 如何根据逗号分隔的日期从日历上的数据库(mysql)表行显示事件【英文标题】:FullCalendar - How to show event based upon comma separated dates from database(mysql) table row on calendar 【发布时间】:2016-03-31 03:05:42 【问题描述】:

我正在尝试根据数据库中表的同一行中的日期显示多个事件,以逗号分隔,如图所示:

Image from the database table

这是我从数据库中获取结果的 php/wordpress 代码:

    $my_query = new WP_Query($args);
    if ($my_query->have_posts()) 
        $i = 0;
        while ($my_query->have_posts()) : $my_query->the_post();
            ?>
            <?php
            $title = get_the_title();
            //$date = explode(',',get_post_meta($post->ID, 'trainee_date_pick', true));
            $date = get_post_meta($post->ID, 'trainee_date_pick', true);
            //$dateArray = explode(',', $date);
            $mealdes = nl2br(get_post_meta($post->ID, 'meal_plan_des', true));
            $url = get_post_meta($post->ID, 'youtube_videos', true);
            $url_two = get_post_meta($post->ID, 'youtube_videos_sec', true);
            $meal_lable = get_post_meta($post->ID, 'meal_plan_label', true);
            $array_cal[$i]["title"] = $title;
            $array_cal[$i]["start"] = $date;
            $array_cal[$i]["url"] = $url;
            $array_cal[$i]["urltwo"] = $url_two;
            $array_cal[$i]["description"] = $mealdes;
            $array_cal[$i]["meallable"] = do_shortcode("[nutrition-label id=" . $meal_lable . "]");
            $i++;
            ?>
            <?php
        endwhile;

echo json_encode($array_cal);
?>

搜索后我尝试自己做,上面的代码像这样返回 json,但日历上没有显示任何内容,但是当有单个日期时,它会显示出来。

["title":"Full Body","start":"2015-12-09, 2015-12-31","url":"","urltwo":"","description":"Deadlift 5x5
\r\nPause Squats 3x8
\r\nBench Press 3x8
\r\nClose Grip Bench 3x12
\r\nAlternating Curls 3x12
\r\nDips 3xMax
\r\nJump Rope 20 minutes
\r\n","meallable":""]

这是我读取 json 数组的 jQuery 代码:

<script type="text/javascript">
    jQuery(document).ready(function () 
        jQuery('#calendar').fullCalendar(
            editable: true,
            droppable: true,
            eventLimit: true,
            events: "/calendar-events/",
            eventRender: function (event, element) 
            element.attr('href', 'javascript:void(0);');
            element.click(function () 
            jQuery("#startTime").html(moment(event.start).format('DD-MM-YYYY'));
                    jQuery("#eventInfo").html(event.description);
                    jQuery("#eventLink").attr('href', event.url);
                    jQuery("#eventLink2").attr('href', event.urltwo);
                    jQuery("#meal_label").html(event.meallable);
//                    jQuery("#labeledit").attr('href',event.editlab);
//                    jQuery('#eventedit').attr('href',event.eventedit);
           jQuery("#eventContent").dialog(modal: true, title: event.title, width: 350);
                );
            
        );
    );
</script>

我真的需要帮助,请有人提出解决方案。

【问题讨论】:

我唯一能真正看到的是,在您的 JSON 中,start 格式不正确。从我所见,您的开始似乎有两个日期,开始和结束,因此您应该拆分这些日期并将结束参数也发送到 json,看看是否有帮助。 Event Object 并查看所需的ISO8601 string 的链接。除此之外,我看不出有什么问题。 不,乔恩,他们都是开始日期,我想在多个日期显示单个事件。 当您仅通过那一项活动时,这两天在完整日历上是否正确显示? 不,这就是我要问的,当这样(2015-12-09、2015-12-31)但只有一个日期(2015-12-31)时,它不会同时显示两个日期出现在日历上。 最多可以有两个日期,还是可以有更多? 【参考方案1】:

好的,既然我了解了您的问题...只需查看每个可能有多个事件的日期列表即可。为此,取消注释您的一行,然后再添加两行。它看起来像这样:

$my_query = new WP_Query($args);
if ($my_query->have_posts()) 
    $i = 0;
    while ($my_query->have_posts()) : $my_query->the_post();
        ?>
        <?php
        $title = get_the_title();
        //$date = explode(',',get_post_meta($post->ID, 'trainee_date_pick', true));
        $date = get_post_meta($post->ID, 'trainee_date_pick', true);
        $dateArray = explode(',', $date);
        $mealdes = nl2br(get_post_meta($post->ID, 'meal_plan_des', true));
        $url = get_post_meta($post->ID, 'youtube_videos', true);
        $url_two = get_post_meta($post->ID, 'youtube_videos_sec', true);
        $meal_lable = get_post_meta($post->ID, 'meal_plan_label', true);
        foreach($dateArray as $date) 
            $array_cal[$i]["title"] = $title;
            $array_cal[$i]["start"] = trim($date);
            $array_cal[$i]["url"] = $url;
            $array_cal[$i]["urltwo"] = $url_two;
            $array_cal[$i]["description"] = $mealdes;
            $array_cal[$i]["meallable"] = do_shortcode("[nutrition-label id=" . $meal_lable . "]");
            $i++;
        
        ?>
        <?php
    endwhile;

echo json_encode($array_cal);
?>

【讨论】:

以上是关于FullCalendar - 如何根据逗号分隔的日期从日历上的数据库(mysql)表行显示事件的主要内容,如果未能解决你的问题,请参考以下文章

如何根据oracle plsql中列中的逗号分隔值拆分选择查询行

如何根据两个逗号分隔值的列中的任何一个值获取记录

根据区域设置的数字格式(逗号分隔)

如何根据一个字段是不是包含oracle sql中的逗号分隔字符串将单行拆分为多行?

日期设置 fullCalendar

excel如何对一组数据按照逗号分列?