0 レビュー
1 回答
PHPイベントカレンダー-フローティングイベント
データベースを使用するカレンダースクリプトがあります-日付をクロスできるようにするために必要です(フローティングイベント)。たとえば、イベントは金曜日に始まり、日曜日に終わり、カバーする日付を強調表示します。私は高低を検索しましたが、役に立ちませんでした。
これが私の日付ベースの構造です:
id
event
day
month
year
category
start
finish
location
データベースの行を(上記と同じ順序で)示します:
1
British Red Cross Practical First Aid
10
3
2012
3
09:00
16:00
Dundee, venue to be confirmed
これが私の現在のPHPです:
<?php
$timestamp = mktime(0,0,0,$cMonth,1,$cYear);
$maxday = date("t",$timestamp);
$thismonth = getdate($timestamp);
$startday = $thismonth['wday'] + 6;
for ($i=0; $i<($maxday+$startday); $i++) {
if(($i % 7) == 0 ) echo "<tr>\n";
if($i < $startday) echo "<td></td>\n";
else{
$sql = "SELECT * FROM events WHERE day='".($i - $startday + 1)."' AND month='".$cMonth."' AND year='".$cYear."'";
$query = mysql_query($sql);
if (mysql_num_rows($query) > 0){
echo "<td valign='top' height='80px'><div class='date' align='right'>".($i - $startday + 1)."</div>";
while ($row = mysql_fetch_assoc($query)){
if ($row['category'] == "1"){
echo "<div style='background:#7F9AA4; margin-bottom: 2px; color: white; width: 98px;'>".$row['event']."</div>";
}elseif ($row['category'] == "2"){
echo "<div style='background:#9C8CAB; margin-bottom: 2px; color: white; width: 98px;'>".$row['event']."</div>";
}elseif ($row['category'] == "3"){
echo "<div style='background:#CABB16; margin-bottom: 2px; color: white; width: 98px;'>".$row['event']."</div>";
}elseif ($row['category'] == "4"){
echo "<div style='background:#86A20B; margin-bottom: 2px; color: white; width: 98px;'>".$row['event']."</div>";
}elseif ($row['category'] == "5"){
echo "<div style='background:#6E4C8C; margin-bottom: 2px; color: white; width: 98px;'>".$row['event']."</div>";
}
}
echo "</td>\n";
}else echo "<td valign='top' height='80px'><div class='date' align='right'>". ($i - $startday + 1) ."</div></td>\n";
}
if(($i % 7) == 6 ) echo "</tr>\n";
}
?>
わからない
0
レビュー
答え :
解決策:
1)イベントが複数の日付にまたがることを何らかの方法で指定する必要があります。 例:spans:int
2)スパン日付(つまり、startdayとstartday + span-1の間の日)が含まれるように検索を変更します。クエリを繰り返し処理して、各行を1か月の各日に1つずつ配列の配列に入れることができます。 1日以上にわたるものを複製する。
3)カレンダーを作成する別の方法は、月全体を一度に検索し、SQLの代わりにPHPを使用してカレンダーを切り刻むことです。 (PHP / SQLをクリーンアップしました。文字列を削除する必要はありません。また、日、月、年の列がintの場合は、引用符で囲む必要はありません)
$sql = "SELECT * FROM events WHERE month=$cMonth AND year=$cYear ORDER BY day";
$query = mysql_query($sql);
$cday = 90;
while ($row = mysql_fetch_assoc($query))
{
$day = $row['day'];
if ($day != $cday)
{
// I'll leave as an exercise how figure out how to output day in particular slot
$day = $cday;
}
}
4)上記で、スパンを考慮したい場合は、たとえば:
$prev_month = ???; $prev_year= ???; $prev_month_days= ???;
$sql = "SELECT * FROM events
WHERE (month=$cMonth AND year=$cYear)
OR ( month= $prev_month and year=$prev_year and day>($prev_month_days - span) )
ORDER BY day";
楽しんでください。
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。