Sabiendo el año y el mes, solo necesitas una función que te cree un calendario, yo usé esta para una herramienta mia de citas previas por internet.
<?php
# Obtenemos el dia de la semana del primer dia
# Devuelve 0 para domingo, 6 para sabado
$diaSemana=date("w",mktime(0,0,0,$month,1,$year))+7;
# Obtenemos el ultimo dia del mes
$ultimoDiaMes=date("d",(mktime(0,0,0,$month+1,1,$year)-1));
$meses=array(1=>"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio",
"Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
$last_cell=$diaSemana+$ultimoDiaMes;
// hacemos un bucle hasta 42, que es el máximo de valores que puede
// haber... 6 filas de 7 dias(columnas)
for($i=8;$i<=42;$i++){
if($i==$diaSemana)
{
// determinamos en que dia empieza
$day=1;
}
if($i<$diaSemana || $i>=$last_cell)
{
// celca vacia
echo "<td> </td>";
}else{
// mostramos el dia
if(comprobarDia($day, $month, $year) >= 1){
echo "<td class='hoy'>$day</td>";
}else{
echo "<td>$day</td>";
}
//if($day==$diaActual)
$day++;
}
// cuando llega al final de la semana, iniciamos una columna nueva
if($i%7==0)
{
echo "</tr><tr>\n";
}
}//Fin bucle for para crear el calendario
?>
Almaceno las variables de los días, meses, etc, y con la función de abajo voy creando la tabla, esa función la tienes que meter en un <tr> de la tabla que tu quieras, solo monta la tabla como lo necesites y en un <tr> metes la funcion de arriba.
Cambia la función para que cuando llegue a un mes/año en el que tienes un dato, te coloree esa celda y puedas añadir un botón o un enlace, si no, lo dejas en blanco y listo.
Y este es el css que use para el calendario, por si quieres retocarlo para amoldarlo a tu web:
#calendar {
font-family:Arial;
font-size:20px;
margin-left: 30%;
}
#calendar caption {
text-align:left;
padding:5px 10px;
background-color:#003366;
color:#fff;
/*font-weight:bold;*/
}
#calendar th {
background-color:#006699;
color:#fff;
width:70px;
font-weight: normal;
padding-left: 8px;
}
#calendar td {
border: 3px solid #FFFFFF;
text-align:right;
padding:20px 5px;
background-color:#EBEBEB;
}
#calendar tr{
border: 3px solid #FFFFFF;
}
#calendar tr.head{
border: 0px;
}
#calendar td:hover{
background-color:#D5D4D4;
}
#calendar td.hoy:hover{
background-color:red;
}
#calendar .hoy {
color: #000000;
background-color:red;
}
Espero que te sirva, saludos :)