カレンダー - 次のリンク

だから私は現在、私のカレンダーとしてこの 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年の1か月間が得られるようにします(それに応じて調整するか、適切にオプションを削除してください)。渡された数値がその範囲にない(またはリンクがまだクリックされていない)場合、それらの数値は 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のようなものです。しかし、あなたはある月にジャンプする直接の方法はありません。

そして、それがそこにあるのです。

1
追加された
@ Jaredはい、ありがとう。一定。他のマイナーなタイプミスを自由に編集する
追加された 著者 Gordon,
INPUT_GET の後にカンマがありませんか?
追加された 著者 Jared Farrish,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com