Каляндар - Next Link

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

1
Паспрабуйце цяжэй. Паспрабуйце зразумець, што адбываецца, і рэалізацыі функцыі, якія неабходныя.
дададзена аўтар TJHeuvel, крыніца

1 адказы

Паколькі функцыя маляваць каландр

function draw_calendar($month,$year){

вы павінны паставіць $ месяц і $ год ў наступнай/папярэдняй спасылкі, напрыклад,

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

Гэтыя дадзеныя затым даступныя $ _ GET , калі такая спасылка пстрыкнуў. Вы не хочаце unsanitized дадзеных, таму вы запытваеце яго, як гэта на верхняй частцы календара сцэнарыя:

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

Гэта будзе альбо выкарыстоўваць сапраўдныя значэння, якiя перадаюцца ў сцэнар або, у выпадку недапушчальных значэнняў, усталюйце год і/або месяц бягучага года і/або месяц.

Цяпер намалюйце каляндар:

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, крыніца