Календар - далі посилання

Отже, я використовував цей http://davidwalsh.name/php-calendar як свій календар, але я У мене виникають проблеми зі створенням способу додати "наступне"/"попереднє" посилання до наступного місяця ... будь-яка допомога дуже вдячна!

1
Намагатися. Спробуйте зрозуміти, що відбувається, і реалізуйте потрібні вам функції.
додано Автор TJHeuvel, джерело

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

Функція фільтру забезпечить, щоб ми отримували місяць від 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, щоб повернутися назад і вперед. Але тоді у вас немає прямого способу перейти до певного місяця.

І все це є.

1
додано
@Jared так, спасибі фіксований Не соромтеся редагувати будь-які інші незначні помилки
додано Автор Gordon, джерело
Чи відсутня кома після INPUT_GET ?
додано Автор Jared Farrish, джерело
Ukrainian PHP comunity
Ukrainian PHP comunity
885 учасників

dev-ua/php