|
|
|
| Есть скрипт, который выводит в браузер календарик:
function my_calendar($fill='') {
$month_names=array("январь","февраль","март","апрель","май","июнь",
"июль","август","сентябрь","октябрь","ноябрь","декабрь");
if (isset($_GET['y'])) $y=$_GET['y'];
if (isset($_GET['m'])) $m=$_GET['m'];
if (isset($_GET['date']) AND strstr($_GET['date'],"-")) list($y,$m)=explode("-",$_GET['date']);
if (!isset($y) OR $y < 1970 OR $y > 2037) $y=date("Y");
if (!isset($m) OR $m < 1 OR $m > 12) $m=date("m");
$month_stamp=mktime(0,0,0,$m,1,$y);
$day_count=date("t",$month_stamp);
$weekday=date("w",$month_stamp);
if ($weekday==0) $weekday=7;
$start=-($weekday-2);
$last=($day_count+$weekday-1) % 7;
if ($last==0) $end=$day_count; else $end=$day_count+7-$last;
$today=date("Y-m-d");
$prev=date('?\m=m&\y=Y',mktime (0,0,0,$m-1,1,$y));
$next=date('?\m=m&\y=Y',mktime (0,0,0,$m+1,1,$y));
$i=0;
?>
<table border=1 cellspacing=0 cellpadding=2>
<tr>
<td colspan=7>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr>
<td align="left"><a href="<? echo $prev ?>"><<<</a></td>
<td align="center"><? echo $month_names[$m-1]," ",$y ?></td>
<td align="right"><a href="<? echo $next ?>">>>></a></td>
</tr>
</table>
</td>
</tr>
<tr><td>Пн</td><td>Вт</td><td>Ср</td><td>Чт</td><td>Пт</td><td>Сб</td><td>Вс</td><tr>
<?
for($d=$start;$d<=$end;$d++) {
if (!($i++ % 7)) echo "<tr>";
echo '<td align="center">';
if ($d < 1 OR $d > $day_count) {
echo " ";
} else {
$now="$y-$m-".sprintf("%02d",$d);
if (is_array($fill) AND in_array($now,$fill)) {
echo '<b><a href="'.$_SERVER['PHP_SELF'].'?date='.$now.'">'.$d.'</a></b>';
} else {
echo $d;
}
}
echo "</td>";
if (!($i % 7)) echo "</tr>";
}
?>
</table>
<? } ?>
|
Если дата совпадает в выводимой в календаре, она оформляется ссылкой. У меня выводится только одна ссылка по дате.
$result=mysql_query("SELECT DISTINCT DATE_FORMAT(date, '%Y-%m-%d') FROM news");
$row=mysql_fetch_array($result);
my_calendar($row); //функция рисования календаря
В базе для примера хранятся три даты:
id | date |
----------------------------------
1 | 2006-09-20 00:00:00 |
2 | 2006-09-21 17:21:16 |
3 | 2006-09-22 17:38:51 |
Календарь рисует только ссылку на дате 20 ( ID 1)
Если же сделать так:
$test=array("2006-09-20", "2006-09-21", "2006-09-22");
my_calendar($test);
| Все выводится правильно: три ссылочки.
Помогите найти решение этой моей сложности? | |
|
|
|
|
|
|
|
для: sirop
(23.09.2006 в 17:57)
| | >Все выводится правильно: три ссылочки.
>Помогите найти решение этой моей сложности?
Не понятно, что требуется, если всё работает? | |
|
|
|
|
|
|
|
для: cheops
(23.09.2006 в 22:20)
| | Работает, но только в том случае, если я вручную пропишу все даты из таблицы в массиве.
А если же я делаю выборку дат из таблицы news так:
<?php
$result=mysql_query("SELECT DISTINCT DATE_FORMAT(date, '%Y-%m-%d') FROM news");
$row=mysql_fetch_array($result);
//функция рисования календаря
my_calendar($row);?>
|
то в календаре ссылкой выводится только один день, хотя в таблице у меня три разных даты. Выводится только дата с ID № 1
У меня не получается вывести данные после запроса в массив | |
|
|
|
|
|
|
|
для: sirop
(24.09.2006 в 13:23)
| | Дело в том, что функция mysql_fetch_array() возвращает только одну запись из результирующей таблицы. Обычно по всей результирующей таблице пробелают в цикле
<?php
while($row=mysql_fetch_array($result))
{
// ...
}
?>
|
У вас либо перед функцией должен быть цикл, который объединяет все записи в массив и передаёт их функции my_calendar(), либо внутри функции должен быть такой цикл, в этом случае функции нужно передавать дескриптор $result. | |
|
|
|
|
|
|
|
для: cheops
(24.09.2006 в 13:39)
| | Я попробовал сделать так:
<?php
$result=mysql_query("SELECT DISTINCT DATE_FORMAT(date, '%Y-%m-%d') as date_format FROM news");
while($row=mysql_fetch_array($result))
{
@$test .= "'".$row['date_format']."',";
}
$test = array($test);
//функция рисования календаря
my_calendar($test);
?>
|
А можно ли использовать $test = array($test); ?
Так как у меня не вывелось ничего | |
|
|
|
|
|
|
|
для: sirop
(24.09.2006 в 14:38)
| | Нет, массив $test лучше формировать следующим образом
<?php
$result=mysql_query("SELECT DISTINCT DATE_FORMAT(date, '%Y-%m-%d') as date_format FROM news");
while($row=mysql_fetch_array($result))
{
$test[] = $row['date_format'];
}
//функция рисования календаря
my_calendar($test);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(24.09.2006 в 14:42)
| | Уважаемый, cheops, большое Вам спасибо!!!
Всё получилось и работает | |
|
|
|