Fullcalendar动态地给出单元格背景颜色

时间:2017-09-21 07:03:33

标签: javascript php calendar fullcalendar

我的sql表中有一个fuvar_status字段。现在,fullcalendar单元格具有静态颜色。

我想要的是:如果fuvar_status为0,背景为#ff0000,或者fuvar_status为1,则bg为另一种颜色。

如何在和javascript文件中写这个?

我的php,它从sql获取记录:

<?php
include_once("connect.php");

$sql = 
"
    SELECT 

        fuvar.fuvar_id,
        fuvar.fuvar_date,
        fuvar.fuvar_status,
        fuvar.fuvar_kerulet,
        gyarto.gyarto_nev,
        Varosok.VarosNev

    FROM fuvar

    LEFT JOIN gyarto ON fuvar.fuvar_honnan = gyarto.gyarto_id
    LEFT JOIN Varosok ON fuvar.fuvar_hova = Varosok.VarosID

    LIMIT 50

";

// WHERE status != Lezárt fuvar 

$get = mysqli_query($kapcs, $sql) or die("SQL ERROR 1 - " . mysqli_error($kapcs));
if(mysqli_num_rows($get) > 0 )
{
    $VarosNev = array();
    $gyarto_nev = array();
    $fuvar_date = array();
    $fuvar_id = array();

    while( $e = mysqli_fetch_array($get))
    {
        if($e['fuvar_kerulet'] == "0" ) { $VarosNev[] = $e['VarosNev']; }
        else { $VarosNev[] = $e['VarosNev'] .' '. $e['fuvar_kerulet']; }

        $gyarto_nev[] = $e['gyarto_nev'];
        $fuvar_date[] = $e['fuvar_date'];
        $fuvar_id[] = $e['fuvar_id'];
    }
    $res = array
    (
        'VarosNev' => $VarosNev,
        'gyarto_nev' => $gyarto_nev, 
        'fuvar_date' => $fuvar_date, 
        'fuvar_id' => $fuvar_id,
    );
    echo json_encode($res);
}
?>

Javascript,生成事件:

for (i = 0; i < hossz; i++) 
            {
                if (eventArray.fuvar_id[i] != '') 
                {
                    valami.push({
                        title: eventArray.gyarto_nev[i] +'\n'+eventArray.VarosNev[i],
                        backgroundColor: '#03674e',
                        start: eventArray.fuvar_date[i],
                        url: '/fuvar-szerkesztes/' + eventArray.fuvar_id[i]
                    });
                } 
                else 
                {
                    valami.push({
                        title: eventArray.gyarto_nev[i] +'\n'+eventArray.VarosNev[i],
                        backgroundColor: '#03674e',
                        start: eventArray.fuvar_date[i],
                    });
                }
            }

1 个答案:

答案 0 :(得分:0)

似乎没有特别的理由在PHP中处理一半的处理,在JavaScript中处理一半。您可以使PHP生成的与fullCalendar兼容。您还在PHP中使用了奇怪的冗余并行数组排列,然后依靠索引值来匹配值。也许你不知道PHP对关联数组的支持?您可以使用一个数组直接创建实际事件:

$get = mysqli_query($kapcs, $sql) or die("SQL ERROR 1 - " . mysqli_error($kapcs));

if(mysqli_num_rows($get) > 0 )
{
  $events = array();

  while( $e = mysqli_fetch_array($get))
  {
    $VarosNev = ($e['fuvar_kerulet'] == "0" ? $e['VarosNev'] :  $e['fuvar_kerulet']);

    $evt = array(
      "title" => $e['gyarto_nev']."\n".$VarosNev,
      "backgroundColor" => ($e["fuvar_status"] == 0 ? "#ff0000" : "#03674e"),
      "start": $e["fuvar_date"]
    );

    if ($e['fuvar_id'] != "") { $evt["url"] = "/fuvar-szerkesztes/".$e["fuvar_id"]; }

    $events[] = $evt;
  }

  echo json_encode($events);
}

然后你根本不需要JavaScript中的for循环 - 你可以直接从服务器发送JSON到fullCalendar。

N.B。显然,如果没有你的数据,我无法完全测试,所以对任何小错误道歉 - 如果你不能修复它们就指出它们,如果有必要我会修改答案。