Оскільки функція намалювати календар є
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(
'Next' .
'Previous',
$dateTime->modify('-1 month')->format('n'),
$dateTime->format('Y'),
$dateTime->modify('+2 month')->format('n'),
$dateTime->format('Y')
);
демо (трохи скорочено)
Іншим варіантом буде зберегти поточний місяць і рік у сеансі, а потім просто переходити до/попередніх посилань без року та місяця, а просто щось на зразок +1 і -1, щоб повернутися назад і вперед. Але тоді у вас немає прямого способу перейти до певного місяця.
І все це є.