使用事件突出显示td元素

时间:2017-08-22 11:57:03

标签: php loops datetime

我正在通过PHP date()功能生成日历,我还有一个 事件 表,其中包含namedate_start ,我想要做的是突出显示有事件的td元素,并保留没有基本格式的元素。

基本上,这是循环当天的脚本:

<?php
     echo "<tr>";

     for ($i = 1; $i < $numDays+1; $i++, $counter++) { 
          $timeStamp = strtotime ("$year-$month-$i");
               if($i == 1){ 
                    $firstDay = date ("w", $timeStamp);
                    for ($j = 0; $j < $firstDay; $j++, $counter++){ 
                         //blank space
                         echo "<td>&nbsp;</td>";
                    }     
                } 
                if($counter % 7 == 0 ){ 
                     echo "<tr></tr>";  
                }

                $todayDate = date("Y-m-d");
                if (date("Y-m-d", $timeStamp) == $todayDate) {
                ?>
                     <td class="today-date"><a href=""><?php echo $i; ?></a></td>
                <?php
                } else {
                ?>
                     <td><a href=""><?php echo $i; ?></a></td>
                <?php
                }
           }
           echo "</tr>";
?>

.today-date是一个强调当天的课程。这是我的表格列:

id | name | description | date_start | date_end | time | pastor_id | pastor | category | venue

2 个答案:

答案 0 :(得分:0)

我可能会将我的事件放入一个带有开始日期键的数组中,所以你最终得到的结果如下:

$events = [
    '2017-08-22' => [
        'name' => 'Event Title',
    ],
    '2017-08-28' => [
        'name' => 'Event Title',
        'name' => 'Event Title',
    ],
];

有多种方法可以从数据库中执行此操作。像这样:

$events = [];
while($row = mysql_fetch_assoc($eventQuery))
{
    $events[$row['start_date']][] = $row['name'];
}

然后在循环中,您可以检查事件的日期并将其放入:

<td class="<?php echo (array_key_exists(date("Y-m-d", $timeStamp), $events)) ? 'has-event-class' : ''; ?>">

与拉动所有日期甚至数月相比,日历中每天进行数据库查询的效率都非常低。

我也倾向于把它移到一个函数中,所以它在你的循环中不会那么长:

function highlightEventTD($timeStamp, $events)
{
    $date = date("Y-m-d", $timeStamp);
    return (array_key_exists($date, $events)) ? 'has-event-class' : '';
}

然后在你的forloop中:

<td class="<?php echo highlightEventTD($timeStamp, $events); ?>">

这也意味着如果你需要显示事件的名称,你可以使用相同的数组和函数:

function getEvents($timestamp, $events)
{
    $date = date("Y-m-d", $timeStamp);
    return (array_key_exists($date, $events)) ? $events[$date] : null;
}

答案 1 :(得分:0)

好的,首先,PHP7不再喜欢打开和关闭php标签了很多次......我用echo改变了语法。

所以试试这个:

app.controller('MainCtrl', function($scope) {
$scope.model = {};
$scope.model.dataSource = new kendo.data.DataSource({
    data: createRandomData(10),
    schema: {
        model: {
            fields: {
                City: { type: "string" }, 
                Title: { type: "string" },
                BirthDate: { type: "date" },
                Age: { type: "number" }
            }
        }
    },
    pageSize: 16,
    editable:true 
});  

$scope.addWWNumEditor= function (container, options) { 
  console.log("Editor Launched", options); 
  $('<input kendo-numeric-text-box k-min="10" k-max="20" style="width: 100%;" data-bind="value:' + options.field + '"/>')
  .appendTo(container);
}



$scope.controlIsDisabled=function(model){
//console.log("model",(model.Age>=50));
var toReturn =  (model.Age>50)?"columnDisabled" : "columnActive";
//console.log('to Return',toReturn);
return toReturn;
}

$scope.model.columns = [  
    { field: 'City', title: 'City' },
    { 
      field: 'Title', 
      title: 'Title',
      template:'<span style="color:red;">EDITABLE</span><span ng-
      class="controlIsDisabled(dataItem)">#=Title#</span>'
    },
    { 
      field: 'Age', 
      title: 'Age',
      template:'<span ng-class="controlIsDisabled(dataItem)">#=Age#</span>' 
     ,
      editor:$scope.addWWNumEditor
    }
];

});