Seite 1 von 1

Neues Modul Geburtstagsliste

Verfasst: Mo 17. Apr 2006, 17:07
von Mc
Anbei ein neues Modul, das die Geburtstage anzeigt.

Voraussetzung ist die Tabelle con_adressen (siehe http://contenido.org/forum/viewtopic.php?p=77504)
In der Tabelle muss zusätzlich das Feld 'Geburtstag' Typ 'date' angelegt werden.

Angezeigt wird:
Wer heute Geburtstag hat (mit Alter)
Wer in den nächsten XX Tagen Geburtstag hat (mit Alter)

Geburtstage sortiert nach Monaten mit Alter, Wochentag des Geburtstags und ob es sich um einen runden Geburtstag handelt (> 60 alle 5 Jahre, sonst 10)

Hier ein Screenshot:
Bild

Und hier das Modul:

Code: Alles auswählen

<?php

/*********************************************** 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname:    Adressenliste - Geburtstage
* Author(s):    Mc 
* Created:      16-04-2006
* Beschreibung: Ausgabe der Geburtstage aus der Tabelle con_adressen (muss vorher neu angelegt werden) 
* Anpassung:    $aktiv und $tagegeb   
************************************************/

$dbConnect = new DB_Contenido;


/*********** Anpassungen *****************************************/
$aktiv = 1;//aktiv =1: nur die aktiven Datensaetze
$tagegeb = "8";//wer hat Geburtstag in den naechsten x Tagen

/************* Benoetigte Funktionen ******************************/ 
//------------ Berechnung des Alters aus dem Geburtstag ------------
    function alter($Geburtstag) {
      if (!empty($Geburtstag)) {
        $gebDateArray = explode("-", $Geburtstag);

        $alter = date(Y) - $gebDateArray[0]; //1. Schritt
        if (date(m) < $gebDateArray[1]){
          $alter = date(Y) - $gebDateArray[0] - 1;
        } //2. Schritt
        if (date(m) == $gebDateArray[1] AND date(d) < $gebDateArray[2]){
          $alter = date(Y) - $gebDateArray[0] - 1;
        }//3. Schritt

        return $alter = $alter." Jahre";
      }
    } //Ende function alter  

//------------ Wochentag des Geburtstags im aktuellen Jahr ----------
    function wochentag($Geburtstag) {
      $gebDateArray = explode("-", $Geburtstag);
      $monatgeb = $gebDateArray[1];
      $taggeb = $gebDateArray[2];

      $weekdays = array('Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag');

      $jahr = date("Y");
      $monat = $monatgeb;
      $tag = $taggeb;

      $jdn = gregoriantojd( $monat, $tag, $jahr );
      $weekday = $weekdays[ $jdn % 7 ];
  
      return $weekday;
    }//Ende funktion wochentag 
/*************** aktuelles Datum ausgeschrieben, deutsch ************/
  function datum() {    
    
    $tage = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"); 
    $monate = array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober",
"November","Dezember");  
  
    $a = date("w"); 
    $b = date("n")-1; 
    $c = date("d."); 
    $d = date("Y"); 
  
    $heute = "$tage[$a], $c $monate[$b] $d"; 
  
    return $heute; 
  }// Ende function datum     
/**************** Ende Funktionen ************************************/
//----------- heute hat Geburtstag -----------------------------------
$datem = date(m);
$dated = date(d);
$result = @mysql_query("SELECT Vorname, Nachname, Geburtstag, aktiv, MONTH(Geburtstag) AS monat, DAYOFMONTH(Geburtstag) AS tag FROM con_adressen WHERE aktiv=$aktiv AND MONTH(Geburtstag)=$datem  AND DAYOFMONTH(Geburtstag)=$dated");
  $zaehlen = mysql_num_rows($result);
  if ($zaehlen > 0) {
    while ( $row = mysql_fetch_array($result) ) {

           $Vorname = $row["Vorname"];
           $Nachname = $row["Nachname"];
           $Geburtstag = $row["Geburtstag"];
             
      $Name = $Vorname." ".$Nachname." (".alter($Geburtstag).")";
      $alle .= $Name.",</nbr> ";
    }
  }
  if ($zaehlen > 1) {$hat1 = "haben";} else {$hat1 = "hat";}    

//----------- Geburtstag in den naechsten $tagegeb Tagen --------------------

$morgen = date("md",strtotime("+1 days"));
$spaeter = date("md", strtotime("+$tagegeb days"));

$result = @mysql_query("SELECT Vorname, Nachname, Geburtstag, aktiv, MONTH(Geburtstag) AS monat, DAYOFMONTH(Geburtstag) AS tag FROM con_adressen WHERE aktiv=1 AND DATE_FORMAT(Geburtstag, '%m%d') BETWEEN $morgen AND $spaeter AND Geburtstag <> '0000-00-00' ORDER BY monat, tag");
  $zaehlen = mysql_num_rows($result);
  if ($zaehlen > 0) {
    while ( $row = mysql_fetch_array($result) ) {

           $Vorname = $row["Vorname"];
           $Nachname = $row["Nachname"];
           $Geburtstag = $row["Geburtstag"];
      
      
      $alter = alter($Geburtstag);
      $alter_zahl = split(" ",$alter);
      $alter_wird = $alter_zahl[0]+1;
     
      $gebDateArray = explode("-", $Geburtstag);
      $Geburtstagdt = $gebDateArray[2].".".$gebDateArray[1].".".$gebDateArray[0];           
      $Name = $Vorname." ".$Nachname." (".$Geburtstagdt." - wird ".$alter_wird.")";
      $alle8 .= $Name.",</nbr> ";
  
    }
  }
  if ($zaehlen > 1) {$hat2 = "haben";} else {$hat2 = "hat";}  

//------- assoziatives Array mit den Monaten erstellen -----
$monate = array("01"=>"Januar", "02"=>"Februar", "03"=>"M&auml;rz", "04"=>"April", "05"=>"Mai", "06"=>"Juni", "07"=>"Juli", "08"=>"August", "09"=>"September", "10"=>"Oktober", "11"=>"November", "12"=>"Dezember");

?>
<!--------------------- ab hier Datenausgabe ----------------------------------->
<p>
<table class="text" width="100%" cellspacing=1 cellpadding=2 bgcolor="#CCCCCC">
  <tr bgcolor="#E2EDD7">
    <td class="text" colspan="2">Content Management Tool von webec - Adressbuch - Geburtstage</td>
  </tr>
  <tr bgcolor="#F0F0F0">
    <td class="text" valign="top" width="160px"><?php echo datum(); ?></td>
    <td class="text" width="660px">
    <?php 
      if (strlen($alle) > 0) { 
        echo "Heute $hat1 Geburtstag: ".substr($alle,0,-8); 
      }
      else {
        echo "Heute hat Geburtstag:&nbsp;&nbsp;----------";
      }
    ?></td>
  </tr>
  <?php 
      if (strlen($alle8) > 0) {
  echo "<tr bgcolor=\"#F0F0F0\">
    <td class=\"text\" colspan=\"2\">";
        echo "In den n&auml;chsten $tagegeb Tagen $hat2 Geb.: ".substr($alle8,0,-8);
    echo "</td>
  </tr>";
      }  
    ?>
</table>
</p>  

<?php
              
echo "<table align=\"left\" class=\"text\" width=\"100%\" cellspacing=1 cellpadding=2 bgcolor=\"#CCCCCC\">";
echo "
  <tr bgcolor=\"#D7D7ED\">
    <td width=\"180px\">Name, Titel Vorname</td>
    <td width=\"110px\">Geburtstag</td><td width=\"100px\">Ist ".date(Y)." ein:</td>
    <td width=\"100px\">Alter</td>
    <td width=\"130px\">runder Geburtstag</td>
    <td width =\"200px\">&nbsp;</td>
  </tr>";                  
                  
foreach ($monate as $key => $value) {
     
  $monat_key = $key;

  echo "
  <tr><td bgcolor=\"#F0F0F0\" colspan=\"6\"><b>". $value. "</b></td></tr>\n";
       
  $result = @mysql_query("SELECT id, Titel, Vorname, Nachname, Geburtstag, aktiv, MONTH(Geburtstag) AS monat, DAYOFMONTH(Geburtstag) AS tag FROM con_adressen WHERE aktiv=$aktiv AND MONTH(Geburtstag)=$monat_key  ORDER BY monat, tag");
  $zaehlen = mysql_num_rows($result);
  if ($zaehlen == 0){
    echo "
  <tr><td colspan=\"6\" bgcolor=\"ffffff\" onMouseOver=this.style.backgroundColor=\"#E2EDD7\"; onMouseOut=this.style.backgroundColor=\"#ffffff\"; valign=\"top\">&nbsp;</td></tr>\n";
  }
  while ( $row = mysql_fetch_array($result) ) {

           $id = $row["id"];
           $Titel = $row["Titel"];    
           $Vorname = $row["Vorname"];
           $Nachname = $row["Nachname"];
           $Geburtstag = $row["Geburtstag"];
           $aktiv = $row["aktiv"];
           $monat = $row["monat"];
      
    $gebDateArray = explode("-", $Geburtstag);
    $Geburtstagdt = $gebDateArray[2].".".$gebDateArray[1].".".$gebDateArray[0]; 
    
    $alter = alter($Geburtstag);
    $alter_zahl = split(" ",$alter);
    $alter_wird = $alter_zahl[0]+1;
    $rest10 = $alter_wird%10;
    $rest5 = $alter_wird%5;
    $rund = false;
    if ($rest10 == 0) $rund = true;
    if ($rest5 == 0 AND $alter_wird > 61) $rund = true;
          
    echo "
  <tr bgcolor=\"ffffff\" onMouseOver=this.style.backgroundColor=\"#E2EDD7\"; onMouseOut=this.style.backgroundColor=\"#ffffff\"; valign=\"top\"><td><nobr>" . $Nachname . ", " . $Titel . " " . $Vorname ."</nobr></td>  <td>" . $Geburtstagdt ."</td><td>". wochentag($Geburtstag) ."</td><td>". alter($Geburtstag)."</td><td>";
  if ($rund == true) {
  echo "wird ".$alter_wird;
  } 
  echo "</td><td></td></tr>\n\n";

  }//ende while
}//ende foreach
echo "</table>";

?>
Gruß Mc

Verfasst: So 23. Apr 2006, 15:06
von Beleuchtfix
Das sieht interessant aus. Wenn jetzt noch eine automatische E-Mail Benachrichtung kommt, dann wäre es perfekt.

Ich würde übrigens noch weitere Felder einbauen, eins für "Art des Feiertages", so dass es nicht nur auf Geburtstag, sondern auch gleichzeitig auf Namenstag oder Hochzeitstag oder Eintritt in den Verein etc. erweitert werden kann. Ein weiteres Kommentarfeld wäre sicherlich auch praktisch.

Gruß
Florian