Календарь - Следующая ссылка - PullRequest
1 голос
/ 27 октября 2011

Так что в настоящее время я использовал это http://davidwalsh.name/php-calendar в качестве календаря, но у меня возникают проблемы с поиском способа добавить ссылку «следующий» / «предыдущий» в следующий месяц ... любая помощь с благодарностью!

1 Ответ

1 голос
/ 16 ноября 2011

Поскольку функция рисования каландра равна

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)
        )
    )
);

Функция фильтра гарантирует, что мы получим месяц между 1 и 12 и год между 2010 и 2015 годами (скорректируйте соответственно или удалите параметры по своему усмотрению). Если переданные числа не находятся в этом диапазоне (или ни одна ссылка еще не была нажата), мы получим 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')
);

демо (слегка сокращенное)

Другой вариант - сохранить текущий месяц и год в сеансе, а затем просто иметь следующие / предыдущие ссылки без года и месяца, а просто что-то вроде +1 и -1 для перехода назад и вперед. Но тогда у вас нет прямого способа перейти к определенному месяцу.

И это все, что нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...