Avatar billede engberg Juniormester
05. oktober 2004 - 15:19 Der er 2 kommentarer og
1 løsning

Arrangere sider på en god måde.

Jeg har en 'dagbog' på nettet, hvor der hele tiden kommer flere sider. Hver 'entry' er en post i en database.
Nu har jeg 3 poster på hver side og så et link til hver side, men der bliver snart så mange sider, at det bliver uoverskueligt. Derfor mangler jeg kodeidéer til hvordan man kunne arrangere posterne i fx. først år, så måneder.

For at se hvad jeg snakker om kan I gå til http://www.engberg.it

Koden der står i menuen til venstre ser således ud:

echo "Side:";
echo "<a href='moblog.php' target='moblog'>1</a>";

$connection = mysql_connect("localhost","user","password") ;
mysql_select_db("databasen", $connection);

$res = mysql_query("SELECT * FROM Tabellen");
$antal = 0;
$ialt = 0;
$antal2 = 1;
while ($row = mysql_fetch_array($res)) {
        $ialt = $ialt+1;
        $antal = $antal+1;
        if ($antal == 3) {
                $antal = 0;
                $antal2 = $antal2+1;
                echo "<br><a href='moblog.php?tag=".$antal2."' target='moblog'>".$antal2."</a>";
        }
}
mysql_close();

echo $ialt." poster i alt";

Jeg vil gerne stadig prøve at holde det så enkelt at selv jeg kan gennemskue koden... :-)
Avatar billede coderdk Praktikant
05. oktober 2004 - 18:20 #1
Jeg ville lave det pr. måned... Noget i stil med dette:

  $datofelt = "dato_felt"; // Erstat indholdet med navnet på det felt der indeholder datoen for posten
  setlocale( LC_TIME, "da_DK", "da", "dan", "da_DK.ISO8859-1" );
  $connection = mysql_connect("localhost","user","password") ;
  mysql_select_db("databasen", $connection);

  $sql = "
    SELECT
      COUNT(1) AS antal
      ,DATE_FORMAT( $datofelt, "%Y%m" ) AS monthyear
    FROM
      Tabellen
    GROUP BY
      monthyear
    ORDER BY
      monthyear DESC
    ";
  $qh = mysql_query( $sql );
  while ( $row = mysql_fetch_assoc( $qh ) )
  {
    $t = mktime( 0, 0, 0, substr( $row['monthyear'], -2 ), 1, substr( $row['monthyear'], 0, 4 ) );
    $dato = ucwords( strftime( "%B %Y", $t ) );
    echo "<br><a href=\"moblog.php?monthyear=$row[monthyear]\">$dato ($row[antal] poster)</a>";
  }
  mysql_free_result( $qh );
  mysql_close();

Det betyder så, at du i din moblog.php fil, skal ændre din query, så den hiver alle for den ene måned ud, i stedet for kun 3... Det kan gøre sådan (tilpas):

  $sql = "
    SELECT
      *
      ,DATE_FORMAT( $datofelt, "%Y%m" ) AS monthyear
    FROM
      Tabellen
    WHERE
      monthyear = '" . mysql_escape_string( $_GET['monthyear'] ) . "'
    ORDER BY
      $datofelt DESC
    ";

Det er *IKKE* testet, så der skal måske rettes lidt :)
Avatar billede coderdk Praktikant
05. oktober 2004 - 18:21 #2
,DATE_FORMAT( $datofelt, "%Y%m" ) AS monthyear

skal selvfølgelig rettes til:

    ,DATE_FORMAT( $datofelt, '%Y%m' ) AS monthyear

begge steder!
Avatar billede engberg Juniormester
07. oktober 2004 - 16:00 #3
Det virker ikke... jeg får bare et link med december 1999 og så ikke mere...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester