Sonntag, 12. Februar 2006

Mein Blog-Kalender (PHP)

Irgendwie hat dies in der Blogosphäre – oder zumindest bei meinem Blog-Dienstleister Blogger.com – noch gefehlt: Ein Kalender, in dem man die eigenen Blog-Einträge in einer leicht erfassbaren Auflistung wiederfindet.

Ich habe mich deshalb (trotz Prüfungen in der nächsten Woche) hinter SubEthaEdit gesetzt und etwas zurecht gecodet. Da ich mein Blog per FTP von Blogger.com direkt auf meinen Server spitzen lasse, verfüge ich zum Glück über die „Rohdaten“ und kann so die Artikel relativ einfach herausschälen. Per Blogger-API wäre dies natürlich noch schöner gewesen, aber leider verfügt diese nicht über die Möglichkeit, alle Posts nur mit dem Titel ausgeben zu lassen. Dann ist halt etwas Handarbeit angesagt … Die Monats-Archive parse ich mit ein paar Regex-Pattern. Das Script basiert auf PHP. Hier das Resultat:

Blog-Kalender

Kalender-Scripting – kleiner Wettbewerb gefällig?

Irgendwann im Leben eines jeden Programmierers erreicht ihn die ruhmvollen Aufgabe, einen Kalender zu coden. Die auf Anhieb nicht so triviale Aufgabe habe ich in meiner „Karriere“ nun bereits einige Male übertragen bekommen, doch erst jetzt bin ich überzeugt. Effizienter geht es nimmer, würde ich behaupten (Gegenvorschläge bitte im Kommentar oder per Mail an mich):

function bloggercal__make_cal_month($str_date_ym) { //str_date_ym e.g. '2006-02'
 global $arr_chron;
 
 $str_output = NULL;
 
 $str_regex_pattern = "^[0-9]{4}-[0-9]{2}$";
 if(!ereg($str_regex_pattern,$str_date_ym)) {
  return $str_output;
 }
 
 // --- BEGIN ESSENTIAL CODE ---
 
 $arr_date_start = getdate(strtotime($str_date_ym . "-01"));
 
 $str_date_end = $arr_date_start['year'] . "-" . ($arr_date_start['mon'] + 1) . "-01"; //Get the first day of the following month
 $arr_date_end = getdate(strtotime($str_date_end) - 1); //Substract 1 sec to get the last day of the month
 
 $int_wday = $arr_date_start['wday'];
 $arr_days = Array();
 for($i = 0; $i < $int_wday; $i++) { //Fills array until we arrive at 1st
  $arr_days[] = 0;
 }
 
 $int_day = 0;
 while($int_day < $arr_date_end['mday']) {
  $int_day += 1;
  
  $arr_days[] = $int_day;
 }
 
 while(count($arr_days)%7 != 0) { //Fills array until we get a full week
  $arr_days[] = 0;
 }
 
 $arr_weeks = array_chunk($arr_days,7);
 
 // --- END ESSENTIAL CODE ---
 
 $str_output .= "<h2>" . date("F Y",strtotime($str_date_ym . "-01")) . "</h2>";
 $str_output .= "<table class=\"tblCal\">\n";
 
 $str_output .= "<thead>";
 $str_output .= "<tr>";
 
 $arr_weekdays = Array(
      "So" => "Sonntag",
      "Mo" => "Montag",
      "Di" => "Dienstag",
      "Mi" => "Mittwoch",
      "Do" => "Donnerstag",
      "Fr" => "Freitag",
      "Sa" => "Samstag"
      );
 foreach($arr_weekdays as $str_weekday_short=>$str_weekday_long) {
  $str_output .= "<td>" . $str_weekday_short . "</td>";
 }
 
 $str_output .= "</tr>";
 $str_output .= "</thead>";
 
 foreach($arr_weeks as $int_week_no=>$arr_days) {
  $str_output .= "<tr>\n";
  
  foreach($arr_days as $int_mday) {
   if($int_mday == 0)
    $str_day = NULL;
   else
    $str_day = "<b>" . $int_mday . "</b>";
   
   $str_date = $str_date_ym . "-" . sprintf("%02d",$int_mday);
   if(isset($arr_chron[$str_date])) {
    $str_day .= "<ul class=\"ulArticles\">\n";
    
    foreach($arr_chron[$str_date] as $str_title) {
     $str_day .= "\t<li>" . $str_title . "</li>\n";
    }
    
    $str_day .= "</ul>\n";
   }
   
   $str_output .= "\t<td>" . $str_day . "</td>\n";
  }
  
  $str_output .= "</tr>\n";
 }
 
 $str_output .= "</table>\n";
 
 return $str_output;
}

Fazit: Nicht dass man einen Kalender coden kann, sondern wie effizient man diesen programmiert/scriptet sagt etwas über die Fähigkeiten eines Entwicklers aus.

Liked this post? Follow this blog to get more. 

Tags:
Labels: Uncategorized

Kommentar erfassen