Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [PHP] Archief maken (https://forum.scholieren.com/showthread.php?t=533347)

Martin 06-07-2003 16:56

[PHP] Archief maken
 
Ik wil met PHP een virtueel archief maken voor records uit de database (MySQL). Elk veld van de weblog heeft een column met daarin de tijd (epoch). Wat ik wil creëren is dit:

- Archief juni 2003
- Archief mei 2003
- Archief april 2003
- Archief maart 2003
- Archief februari 2003
- Archief januari 2003
- Archief december 2002

Maar hoe krijg ik met PHP voor elkaar dat hij:
a. de namen van de archieven dynamisch genereert?
b. de juiste epoch-begintijd en eindtijd berekend die hoort bij die maand?

Manuzhai 06-07-2003 17:51

Ik zou naast je UNIX timestamp (epoch is nogal een verwarrend woord) een MySQL DATETIME veld opnemen in je database, dat maakt het acht keer makkelijker. :)

Martin 06-07-2003 18:46

Citaat:

Manuzhai schreef op 06-07-2003 @ 17:51:
Ik zou naast je UNIX timestamp (epoch is nogal een verwarrend woord) een MySQL DATETIME veld opnemen in je database, dat maakt het acht keer makkelijker. :)
extra column opnemen is IMHO erg onhandig, je kan met mktime() immers ook wel de UNIX timestamp van een datum uitrekenen. Vervolgens pluk je de boel met een MySQL query (BETWEEN) uit de database.

Maar hoe maak ik zo`n lijstje nou dynamisch? :(

Martin 06-07-2003 19:40

Ik heb nu dit:

PHP-code:

<?
$current_year = date('Y');
$current_month = date('m');

echo "ARCHIVE";
echo "<HR>";
    
    /* CREATE YEAR-LOOP */
    for ($year = 2002; $year <= $current_year; $year++) {

        echo "<B>$year</B><br>";

            /* START MONTH-LOOP, BUT CHECK FIRST IF THE YEAR DID NOT END */
            
            /* IF CURRENT YEAR DIDN`T END, THEN PRINT ONLY THE PAST MONTHS */
            if($year == $current_year){
            
                for ($month = 2; $month <= $current_month+1; $month++) {

                    echo date ("F Y", mktime (0,0,0,$month,0,$year));
                    echo "<br>";
                }        

            }
            /* IF CURRENT YEAR DID END, THEN PRINT ALL MONTHS */
            else {

                for ($month = 2; $month <= 13; $month++) {
                    echo date ("F Y", mktime (0,0,0,$month,0,$year));
                    echo "<br>";
                }
            
            }

    }
?>

Maar, nu print hij de engelse namen van de maanden, dit moet in het Nederlands. SETLOCALE() werkt blijkbaar niet op de server van S.com, en ook niet op mijn lokale webserver. Ik heb alle mogelijkheden geprobeerd die op php.net staan, maar niets werkt.

Gimme more beer 06-07-2003 20:22

Hoe gebruik je je setlocale commando?

De standaard manier op php.net wil niet altijd goed werken.

Dit staat er:

PHP-code:

<?php
    
/* zet de locale op Dutch */
    
setlocale (LC_ALL'nl_NL');

    
/* Output: vrijdag 22 december 1978 */
    
echo strftime ("%A %e %B %Y"mktime (00012221978));
?>

Het wil echter niet altijd zo kloppen...

Maar heb je het zo gebruikt of heb je al meer dingen geprobeerd? Op mijn servers krijg ik dit soort dingen opzich makkelijk aan het werk...

Martin 06-07-2003 20:24

Citaat:

Gimme more beer schreef op 06-07-2003 @ 20:22:
Maar heb je het zo gebruikt of heb je al meer dingen geprobeerd? Op mijn servers krijg ik dit soort dingen opzich makkelijk aan het werk...
Ik heb alle dingen geprobeerd die ook door mensen die gereageerd hebben zijn aangegeven. Maar ik vraag Jon anders wel even zodra hij online komt :).

De rest van de problemen zijn inmiddels opgelost. Even de source:

PHP-code:

<?
$current_year = date('Y');
$current_month = date('m');

echo "ARCHIVE";
echo "<HR>";
    
    /* CREATE YEAR-LOOP */
    for ($year = 2002; $year <= $current_year; $year++) {

        echo "<B>$year</B>";

            /* START MONTH-LOOP, BUT CHECK FIRST IF THE YEAR DID NOT END */
            
            echo "<ul>";

            /* IF CURRENT YEAR DIDN`T END, THEN PRINT ONLY THE PAST MONTHS */
            if($year == $current_year){
            
                for ($month = 2; $month <= $current_month+1; $month++) {

                    echo "<li>";
                    $month_txt    = date ("F", mktime (0,0,0,$month,0,$year));
                    $firstday    = mktime (0,0,0,$month,1,$year);
                    $lastday    = mktime (24,0,0,$month+1,0,$year);
                    echo "$month_txt | $firstday/$lastday";



                }        

            }
            /* IF CURRENT YEAR DID END, THEN PRINT ALL MONTHS */
            else {

                for ($month = 2; $month <= 13; $month++) {
                    echo "<li>";
                    $month_txt    = date ("F", mktime (0,0,0,$month,0,$year));
                    $firstday    = mktime (0,0,0,$month,1,$year);
                    $lastday    = mktime (24,0,0,$month+1,0,$year);
                    echo "$month_txt | $firstday/$lastday";
                }
            
            }

            echo "</ul>";

    }
?>


Gimme more beer 06-07-2003 20:29

Een oplossing die je kunt proberen is trouwens:

PHP-code:

<?
setlocale (LC_TIME, "nl_NL.DIS_8859-15");

echo strftime ("%A %e %B %Y", mktime (0, 0, 0, 12, 22, 1978));
?>

Is de output van je setlocale eigenlijk altijd gewoon de $locale samen met de omzetting naar de $locale of geeft hij ook echt een taal?

Bijvoorbeeld:
PHP-code:

<?
echo setlocale(LC_TIME, "nl_NL.DIS_8859-15");
?>

Geeft dit nl_NL.DIS_8859-15 als uitvoer of eerder iets van Nederlands? Maakt verder trouwens niet uit, maar als je die truuc van die meerdere opties uitprobeert zou het eerste wel handig zijn... Maakt je code in veel gevallen korter!

Martin 06-07-2003 20:34

Citaat:

Gimme more beer schreef op 06-07-2003 @ 20:29:
Een oplossing die je kunt proberen is trouwens:

PHP-code:

<?
setlocale (LC_TIME, "nl_NL.DIS_8859-15");

echo strftime ("%A %e %B %Y", mktime (0, 0, 0, 12, 22, 1978));
?>


Helpt niets :(

Citaat:

Gimme more beer schreef op 06-07-2003 @ 20:29:

Is de output van je setlocale eigenlijk altijd gewoon de $locale samen met de omzetting naar de $locale of geeft hij ook echt een taal?
Bijvoorbeeld:
PHP-code:

<?
echo setlocale(LC_TIME, "nl_NL.DIS_8859-15");
?>

Geeft dit nl_NL.DIS_8859-15 als uitvoer of eerder iets van Nederlands? Maakt verder trouwens niet uit, maar als je die truuc van die meerdere opties uitprobeert zou het eerste wel handig zijn... Maakt je code in veel gevallen korter!

Helemaal geen echo :(

Gimme more beer 06-07-2003 21:15

Dan zit daar ergens je probleem, hij kan geen NL taal weergeven... Kent ie niet ofzo...

Gimme more beer 06-07-2003 21:19

En "Dutch" ook al geprobeerd? Zag ik ook ergens staan...

Gimme more beer 06-07-2003 21:21

Trouwens, geeft hij ook geen FALSE weer als je die opvraagt?

Martin 06-07-2003 21:46

Citaat:

Gimme more beer schreef op 06-07-2003 @ 21:21:
Trouwens, geeft hij ook geen FALSE weer als je die opvraagt?
nope :(


Alle tijden zijn GMT +1. Het is nu 14:59.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.