日历 - 下一个链接

时间:2011-10-27 13:33:42

标签: php hyperlink calendar

所以我目前使用此http://davidwalsh.name/php-calendar作为我的日历,但我无法想出一种方法来添加下一个月的“下一个”/“上一个”链接...任何帮助都很大理解!

1 个答案:

答案 0 :(得分:1)

由于绘制日历的功能是

function draw_calendar($month,$year){

您必须在下一个/上一个链接中提供$month$year,例如

/calendar.php?month=12&year=2011

单击此类链接后,$_GET可以使用此数据。您不需要未经过数据处理的数据,因此您可以在日历脚本的基础上以此方式获取它:

$input = filter_input_array(
    INPUT_GET,
    array(
        'month' => array(
            'filter'    => FILTER_VALIDATE_INT,
            'options'   => array('min_range' => 1, 'max_range' => 12)
        ),
        'year' => array(
            'filter'    => FILTER_VALIDATE_INT,
            'options'   => array('min_range' => 2010, 'max_range' => 2015)
        )
    )
);

过滤功能将确保我们在2010年到2015年之间获得1到12个月之间的一个月(相应地调整或根据需要删除选项)。如果传递的数字不在该范围内(或者还没有点击链接),我们将获得false,这意味着我们必须设置合理的默认值,例如。

$input['year']  = $input['year'] ?: date('Y');
$input['month'] = $input['month'] ?: date('n');

这将使用传递给脚本的有效值,或者,如果值无效,则将年份和/或月份设置为当前年份和/或月份。

现在绘制日历:

echo draw_calendar($input['month'], $input['year']);

对于下一个/上一个链接,您可以手动检查月份是12还是1,然后相应地增加/减少年份或使用DateTime对象

$dateTime = new DateTime;
$dateTime->setDate($input['year'], $input['month'], 1));
printf(
    '<a href="/calendar.php?month=%d&amp;year=%d">Next</a>' .
    '<a href="/calendar.php?month=%d&amp;year=%d">Previous</a>',
    $dateTime->modify('-1 month')->format('n'),
    $dateTime->format('Y'),
    $dateTime->modify('+2 month')->format('n'),
    $dateTime->format('Y')
);

demo (slightly abridged)

另一个选择是将当前月份和年份存储在会话中,然后只有没有年份和月份的下一个/上一个链接,而只需要+1和-1之类的来回链接。但是你没有直接的方法可以跳到某个月。

这就是它的全部内容。