В статье "Рабочие инструменты сайтостроителя. Часть 2" есть пример вывода календаря для новостей.
Вот первый фрагмент:
****************************************************
Алгоритмы формирования календаря на указанный год и месяц не представляют секрета, обычно отсчет ведется от 1 января каждого года. Большое количество функций PHP упрощает многие операции по формированию, сравнению и преобразованию дат. Так, функция mktime(), которая потребуется при составлении календаря, позволяет преобразовать дату в ее внутренний формат, а функция date() - выделить любой фрагмент из даты или изменить ее формат. При создании раздела новостей на сайте следует не только вывести календарь, но и отобразить в нем актуальные данные, соответствующие содержимому таблицы. Иными словами, дни месяца, для которых заведены новости, должны ссылаться на соответствующий гипертекстовый файл (этот файл, как и всю страничку новостей, следует формировать автоматически). Сопоставить дни месяца и записи таблицы позволяет следующий фрагмент кода, в котором сначала создается массив из 31 элемента, затем он заполняется единичными значениями, если хотя бы одна новость занесена в таблицу, или нулевыми значениями, если таких новостей нет.
$days=array();
for ($k=0;$k<32;$k++) { $days[$k]=0; }
// отбираем даты, которые попадают в диапазон
// от 1 числа текущего месяца
// до 1 числа следующего месяца
$fd=date("Y-m-d", mktime(0,0,0,$month,1,$year));
$ld=date("Y-m-d", mktime(0,0,0,$month+1,1,$year));
$sql1="select *, dayofmonth(pdate) as dnum from news where (pdate>=\'$fd\' and pdate<\'$ld\') group by pdate";
$r=mysql_db_query(dbname, $sql1);
for ($i=0; $i
{
$f=mysql_fetch_array($r);
$nday=$f[dnum];
$days[$nday]=1;
}
****************************************************
Вот второй фрагмент:
****************************************************
После инициализации массива $days[] можно составить функцию для формирования календаря для указанного года и месяца. Функция showcalendar() представлена ниже.
function showcalendar($amonth, $ayear, $adays)
{
$first=mktime(0,0,0,$amonth,1,$ayear);
$wd=date( "w", $first);
if ($wd==0) { $wd=7; }
$lastday=date( "d",mktime(0,0,0,$amonth+1,0,$ayear));
$cur=-$wd+1;
$pred=time()-86400;
$curday=(int)date( "d",$pred)+1;
$curyear=(int)date( "Y",$pred);
$curmonth=(int)date( "m",$pred);
$stat=0;
if ($curyear==$ayear and $curmonth==$amonth) { $stat=1; }
print "
";
for ($k=0;$k<6;$k++) {
print "";
for ($i=0;$i<7;$i++ ) {
$cur++;
if (($cur<=0) || ($cur>$lastday) ) print "  | ";
else
{
$mkd=date("Y-m-d", mktime(0,0,0,$amonth,$cur,$ayear));
if ($cur==$curday and $stat==1)
{ if ($adays[$cur]==0) print "$cur | "; else print "$cur | ";}
else
{ if ($adays[$cur]==0) print "$cur | "; else print "$cur | ";}
}
}
print "
";
}
print "
\\n";
}
****************************************************
Собственно суть проблемы:
Календарь у меня выводиться но без ссылок в тех датах где есть записи в базе.
Я так понял, что первый фрагмент нужно как-то вставить во второй, но вот куда именно не пойму
Или может я не так думаю.
Помогите пож-та разобраться.