Kalender - Volgende link

Dus ik heb deze http://davidwalsh.name/php-calendar momenteel als mijn agenda gebruikt, maar ik heb heb problemen met het bedenken van een manier om een ​​'volgende'/'vorige' link toe te voegen aan de volgende maand ... alle hulp wordt enorm op prijs gesteld!

1
Probeer harder. Probeer te begrijpen wat er aan de hand is en implementeer de functies die u nodig hebt.
toegevoegd de auteur TJHeuvel, de bron

1 antwoord

Omdat de functie om de kalender te tekenen is

function draw_calendar($month,$year){

u moet $ maand en $ jaar opgeven in de volgende/vorige links, bijvoorbeeld

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

Deze gegevens zijn dan beschikbaar in $ _ GET wanneer op zo'n link wordt geklikt. U wilt geen ongeanonimiseerde gegevens, dus u haalt het zo op uw kalenderscript:

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

De filterfunctie zorgt ervoor dat we tussen 2010 en 2015 een maand tussen 1 en 12 en een jaar krijgen (pas deze aan of verwijder de opties naar eigen inzicht). Als de doorgegeven cijfers niet binnen dat bereik vallen (of er nog niet op een link is geklikt), krijgen we false voor hen, wat betekent dat we normale waarden moeten instellen, bijvoorbeeld

$input['year']  = $input['year'] ?: date('Y');
$input['month'] = $input['month'] ?: date('n');

Hiermee worden de geldige waarden gebruikt die aan het script zijn doorgegeven of, in geval van ongeldige waarden, stelt u het jaar en/of de maand in op het huidige jaar en/of de huidige maand.

Teken nu de kalender:

echo draw_calendar($input['month'], $input['year']);

Voor de volgende/vorige koppeling kunt u handmatig controleren of de maand 12 of 1 is en vervolgens het jaar dienovereenkomstig verhogen/verlagen of een DateTime -object gebruiken

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

demo (enigszins ingekort)

Een andere optie zou zijn om de huidige maand en het volgende jaar in een sessie op te slaan en dan alleen de volgende/vorige links zonder jaar en maand te hebben, maar eerder iets als +1 en -1 om heen en weer te gaan. Maar dan heb je geen directe manier om naar een bepaalde maand te springen.

En dat is alles wat er is.

1
toegevoegd
@Jared Ja, bedankt. vast. voel je vrij om andere kleine typefouten te bewerken
toegevoegd de auteur Gordon, de bron
Mist u een komma na INPUT_GET ?
toegevoegd de auteur Jared Farrish, de bron