Newsarchiv wie auf QuakeNet.org

Johnnii360

Erfahrenes Mitglied
Grüsst euch! :)

Ich steh mal wie immer vor einem Problem, dass ich selber leider nicht lösen kann, und deshalb eure Hilfe benötige. :)

Also: Ich möchte gerne so ein Newsarchiv wie auf http://www.quakenet.org/news.php haben, trotzdem weiss ich aber leider nicht wie ich das machen kann.

Ich würde mich sehr über eure Hilfe freuen.
Vielen Dank im Voraus! :)
 
Hast du schon einen Ansatz? Hast du irgendein bestimmtes Problem?
Oder willst du einfach nur, dass wir dir hier ein fertiges Script geben, oder dir einfach sagen, was du alles machen sollst? Ein bischen Eigeninitiative wäre nicht schlecht.
Solltest du wirklich ein fertiges Script suchen, wird dir google sicher gerne helfen. Du könntest auch mal bei hotscripts.com nachschauen.
 
Mal folgende Überlegung

Du trägst news ein mit ein paar daten, sicher wird es in eine DB gespeichert.
Da würde ich mir spontan ein festes Datumsformat überlegen was du immer beim eintragen der news benutz. Am besten Jahr.Monat.Tag -> zb 2005.06.04

Vor dem Eintrag in die DB errechnest du dir dann den timestamp aus dem datum:
PHP:
//datum errechnen
    $datum = explode(".",$datum);
    $year = $datum[0];
    $month = $datum[1];
    $day = $datum[2];
    $month = str_replace($monat_int,$monat,$month); 
    $datum = strtotime("$day $month $year");

Und dann trägst du das in die DB ein. zb

Title, Text, Time... und dazu Monat, Jahr, Tag. Das ist der entscheidende Teil.
Also würde deine Tabelle in der DB zb aus news_id, title, text, monat, jahr, tag bestehen.

Beim auslesen brauchst du dann 3 Schleifen (wenn man avon ausgeht das es pro Tag nur einmal News gibt sonst würde das aufwendiger)

Das Script:
auslesen aus DB

PHP:
<?php

$sql_j = "SELECT * FROM table GROUP BY jahr";
$res_j = mysql_query($sql_j);

while($jahr = mysql_fetch_array($res_j))
{
  //ausgabe des jahres
  
  $sql_m = "SELECT * FROM table WHERE jahr = ".$jahr['jahr']." GROUP BY monat";
  $res_m = mysql_query($sql_m);

  while($monat = mysql_fetch_array($res_m))
  {
    //ausgabe des Tages
    $sql_t = "SELECT * FROM table WHERE monat = ".$monat['monat']." AND jahr = ".$jahr['jahr'];
    $res_t = mysql_query($sql_t);
    
    while($tag = mysql_fetch_array($sql_m))
    {
      //ausgabe der Tage
    }
  }
}

?>

und dann ausgeben. So nun darfst du das gerne umsetzen und das ergebnis is das wie bei quakenet

hab das mal editiert
 
Zuletzt bearbeitet:
tholmer hat gesagt.:
Mal folgende Überlegung

Du trägst news ein mit ein paar daten, sicher wird es in eine DB gespeichert.
Da würde ich mir spontan ein festes Datumsformat überlegen was du immer beim eintragen der news benutz. Am besten Jahr.Monat.Tag -> zb 2005.06.04

Vor dem Eintrag in die DB errechnest du dir dann den timestamp aus dem datum:
PHP:
//datum errechnen
    $datum = explode(".",$datum);
    $year = $datum[0];
    $month = $datum[1];
    $day = $datum[2];
    $month = str_replace($monat_int,$monat,$month); 
    $datum = strtotime("$day $month $year");

Und dann trägst du das in die DB ein. zb

Title, Text, Time... und dazu Monat, Jahr, Tag. Das ist der entscheidende Teil.
Also würde deine Tabelle in der DB zb aus news_id, title, text, monat, jahr, tag bestehen.

Beim auslesen brauchst du dann 3 Schleifen (wenn man avon ausgeht das es pro Tag nur einmal News gibt sonst würde das aufwendiger)

Das Script:
auslesen aus DB

PHP:
<?php

$sql_j = "SELECT * FROM table GROUP BY jahr";
$res_j = mysql_query($sql_j);

while($jahr = mysql_fetch_array($res_j))
{
  //ausgabe des jahres
  
  $sql_m = "SELECT * FROM table WHERE jahr = ".$jahr['jahr']." GROUP BY monat";
  $res_m = mysql_query($sql_m);

  while($monat = mysql_fetch_array($res_m))
  {
    //ausgabe des Tages
    $sql_t = "SELECT * FROM table WHERE monat = ".$monat['monat']." AND jahr = ".$jahr['jahr'];
    $res_t = mysql_query($sql_t);
    
    while($tag = mysql_fetch_array($sql_m))
    {
      //ausgabe der Tage
    }
  }
}

?>

und dann ausgeben. So nun darfst du das gerne umsetzen und das ergebnis is das wie bei quakenet

hab das mal editiert
Das hört sich verdammt gut an.
Das Datum wird bei mir via UNIX_TIMESTAMP, sprich time() in die Datenbank gespeichert. Ich werd das mal ausprobieren, und wenn es nicht geht, werde ich damit ein wenig rumbasteln. :)

Danke nochmals! :top: :)
 
ich würde das Thema gerne nochmal wieder aufgreifen.
Ich bin auch grad dabei socl ein News Archiv zu erstellen, komm aber einfach nicht weiter, da in meiner DB die time Einträge auch als Timestamp abgespeichert werden, und es ausserdem auch teilweise mehrere News pro Tag geben kann.

Kann mir da bitte jemand helfen? Ich scheitere da irgendwie an der timestamp Abfrage...

Danke!
 
Nabend,
wenn MySQL schon Datums- und Zeitfunktionen zur Verfügung stellt, dann sollte man diese auch für Datums-/Zeitspalten verwenden.
Ich würde der Spalte, in der das Datum gespeichert werden soll, also den Typ DATETIME geben und die MySQL-Abfrage ungefähr wiefolgt aufbauen:
PHP:
<?php
$sql = "SELECT
            news_title,
            news_text,
            [...]
            DAY(news_date) AS news_day,
            MONTH(news_date) AS news_month,
            YEAR(news_date) AS news_year
        FROM 
            <news_table>
        ORDER BY 
            news_id DESC";

$result = mysql_query($sql) or die(mysql_error());

Danach lassen sich die erhaltenen Daten mit PHP weiterverwerten.

PHP:
$months = array(1 => 'Januar',
                2 => 'Februar',
                3 => 'März',
                [...]
               );
while ($row = mysql_fetch_assoc($result)) {
    if (!isset($year) || $year != $row['news_year']) {
        $year = $row['news_year'];
        echo "<h1>" . $year . "</h1>";
    }
    if (!isset($month) || $month != $row['news_month']) {
        $month = $row['news_month'];
        echo "<h2>" . $months[$month] . "</h2>\n";
    }
    echo $row['news_day'] . ". " . $row['news_title'] . "<br />\n";
}
* ungetestet

Beim Eintragen kann man sich übrigens die MySQL-eigene Funktion NOW() zu Nutzen machen, um den Spaltenwert auf die aktuelle Uhrzeit zu setzen.

Gruß
Marvin
 
Servus!

Ich hab das heute nochmal angepackt. Irgendwie funktioniert das net.

PHP:
$jahr_r = mysql_query("SELECT id,YEAR(date) AS date_jahr FROM $tabname_news GROUP BY date_jahr ORDER BY date_jahr") or die (mysql_error());
while($jahr = mysql_fetch_array($jahr_r))
{

Ergibt komischerweise keine Fehler. Aber Ausgabemässig wird nichts ausgegeben.
 
Hallo,

ich würde mit einem timestamp arbeiten. Den auslesen, dann nach Jahren, dann nach Monaten und dann nach dem Tag sortieren. Und das ganze in einem Array.

Ich hoffe mal ich habe es verständlich formuliert? :confused:

Tobee
 
tobee hat gesagt.:
Hallo,

ich würde mit einem timestamp arbeiten. Den auslesen, dann nach Jahren, dann nach Monaten und dann nach dem Tag sortieren. Und das ganze in einem Array.

Ich hoffe mal ich habe es verständlich formuliert? :confused:

Tobee
Halbwegs. ;) Ein Scriptschnipsel wäre noch super. :)
 

Neue Beiträge

Zurück