Cache Birthday MOD

Kleine Codeänderungen oder Mini-MODs
Keine Anfragen!!! -- No requests!!!

Moderator: Supporter

Cache Birthday MOD

Beitragvon AmigaLink » 27. Apr 2005 13:52

Es gibt jede menge Beschreibungen, auf den diversen Support-Boards, die dem Birthday MOD von Niels einen Cache zufügen um den aufbau des Forenindex und des evtl. vorhandenen Portals zu beschleunigen.
Problem bei der Sache ist, das kein Mensch mehr durchblickt welcher Code nun gerade aktuell ist (php Anfänger schon gar nicht)!

Deswegen hier mal der Code den ich auf EmF verwende. Zusammen mit den Anpassungen für evtl. noch andere vorhandene Mods. Vorteil dieses Codes, gegenüber dem Cache von Niels, ist das der Cache auch aktualisiert wird wenn sich ein neuer User registriert und sein Konto aktiviert hat und somit die Daten immer aktuell sind. :P
Außerdem werden inaktive User nicht mit angezeigt.

Erstelle im cache order einen Ordner namens bday mit CHMOD 777.
Und dann:
Code: Alles auswählen
#
#----------[ OPEN ]-------------------------------------
#

index.php

#
#----------[ FIND ]-------------------------------------
#

// Birthday Mod, Show users with birthday
$sql = ($board_config['birthday_check_day']) ? "SELECT user_id, username, user_birthday,user_level FROM " . USERS_TABLE. " WHERE user_birthday!=999999 ORDER BY username" :"";
if($result = $db->sql_query($sql))
{
   if (!empty($result))
   {
      $time_now = time();
      $this_year = create_date('Y', $time_now, $board_config['board_timezone']);
      $date_today = create_date('Ymd', $time_now, $board_config['board_timezone']);
      $date_forward = create_date('Ymd', $time_now+($board_config['birthday_check_day']*86400), $board_config['board_timezone']);
         while ($birthdayrow = $db->sql_fetchrow($result))
      {
            $user_birthday2 = $this_year.($user_birthday = realdate("md",$birthdayrow['user_birthday'] ));
            if ( $user_birthday2 < $date_today ) $user_birthday2 += 10000;
         if ( $user_birthday2 > $date_today  && $user_birthday2 <= $date_forward )
         {
            // user are having birthday within the next days
            $user_age = ( $this_year.$user_birthday < $date_today ) ? $this_year - realdate ('Y',$birthdayrow['user_birthday'])+1 : $this_year- realdate ('Y',$birthdayrow['user_birthday']);
            switch ($birthdayrow['user_level'])
            {
               case ADMIN :
                     $birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>';
                     $style_color = 'style="color:#' . $theme['fontcolor3'] . '"';
                  break;
               case MOD :
                     $birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>';
                     $style_color = 'style="color:#' . $theme['fontcolor2'] . '"';
                  break;
               default: $style_color = '';
            }
            $birthday_week_list .= ' <a href="' . append_sid("profile.$phpEx?mode=viewprofile&amp;" . POST_USERS_URL . "=" . $birthdayrow['user_id']) . '"' . $style_color .'>' . $birthdayrow['username'] . ' ('.$user_age.')</a>,';
         } else if ( $user_birthday2 == $date_today )
            {
            //user have birthday today
            $user_age = $this_year - realdate ( 'Y',$birthdayrow['user_birthday'] );
            switch ($birthdayrow['user_level'])
            {
               case ADMIN :
                     $birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>';
                     $style_color = 'style="color:#' . $theme['fontcolor3'] . '"';
                  break;
               case MOD :
                     $birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>';
                     $style_color = 'style="color:#' . $theme['fontcolor2'] . '"';
                  break;
               default: $style_color = '';
            }

            $birthday_today_list .= ' <a href="' . append_sid("profile.$phpEx?mode=viewprofile&amp;" . POST_USERS_URL . "=" . $birthdayrow['user_id']) . '"' . $style_color .'>' . $birthdayrow['username'] . ' ('.$user_age.')</a>,';
            }
         
      }
      if ($birthday_today_list) $birthday_today_list[ strlen( $birthday_today_list)-1] = ' ';
      if ($birthday_week_list) $birthday_week_list[ strlen( $birthday_week_list)-1] = ' ';
   }
   $db->sql_freeresult($result);
}

#
#----------[ REPLACE WITH ]-----------------------------
#

// Cache - Birthday Mod, Show users with birthday
$cache_bday_file = $phpbb_root_path . "cache/bday/bday_" . $board_config['board_timezone'] . ".php";
if (@file_exists($cache_bday_file))
{
   $sql = "SELECT user_regdate
      FROM " . USERS_TABLE . "
      WHERE user_id <> " . ANONYMOUS . " AND user_active = 1
      ORDER BY user_id DESC
      LIMIT 0,1";
   $result = $db->sql_query($sql);
   while ($row = mysql_fetch_array($result))
   {
      $newest_regdate = $row['user_regdate'];
   }
   $db->sql_freeresult($result);

   $last_update_time = @filemtime($cache_bday_file);
   $valid = (((date('Yz',time()) - date('Yz',$last_update_time))<1) && ((time() - $newest_regdate) > (time() - $last_update_time) )) ? true : false; 
}
else
{
   $valid = false;
}

if ($valid )
{
   include ($cache_bday_file);
   $birthday_today_list = stripslashes($birthday_today_list);
   $birthday_week_list = stripslashes($birthday_week_list);
}
else
{
   $sql = ($board_config['birthday_check_day']) ? "SELECT user_id, username, user_birthday,user_level FROM " . USERS_TABLE. " WHERE user_birthday!=999999 AND user_active=1  ORDER BY username" :"";
   if($result = $db->sql_query($sql))
   {
      if (!empty($result))
      {
         $time_now = time();
         $this_year = create_date('Y', $time_now, $board_config['board_timezone']);
         $date_today = create_date('Ymd', $time_now, $board_config['board_timezone']);
         $date_forward = create_date('Ymd', $time_now+($board_config['birthday_check_day']*86400), $board_config['board_timezone']);
         while ($birthdayrow = $db->sql_fetchrow($result))
         {
            $user_birthday2 = $this_year.($user_birthday = realdate("md",$birthdayrow['user_birthday'] ));
            if ( $user_birthday2 < $date_today )
            {
               $user_birthday2 += 10000;
            }
            if ( $user_birthday2 > $date_today  && $user_birthday2 <= $date_forward )
            {
               // user are having birthday within the next days
               $user_age = ( $this_year.$user_birthday < $date_today ) ? $this_year - realdate ('Y',$birthdayrow['user_birthday'])+1 : $this_year- realdate ('Y',$birthdayrow['user_birthday']);
               switch ($birthdayrow['user_level'])
               {
                  case ADMIN :
                     $birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>';
                     $style_color = 'style="color:#' . $theme['fontcolor3'] . '"'
                     ;break;
                  case MOD :
                     $birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>';
                     $style_color = 'style="color:#' . $theme['fontcolor2'] . '"'
                     ;break;
                  default: $style_color = '';
               }
               $birthday_week_list .= ' <a href="profile.'.$phpEx.'?mode=viewprofile&amp;' . POST_USERS_URL . '=' . $birthdayrow['user_id'] . '"' . $style_color .'>' . $birthdayrow['username'] . ' ('.$user_age.')</a>,';
            }
            else if ( $user_birthday2 == $date_today )
            {
               //user have birthday today
               $user_age = $this_year - realdate ( 'Y',$birthdayrow['user_birthday'] );
               switch ($birthdayrow['user_level'])
               {
                  case ADMIN :
                     $birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>';
                     $style_color = 'style="color:#' . $theme['fontcolor3'] . '"'
                     ;break;
                  case MOD :
                     $birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>';
                     $style_color = 'style="color:#' . $theme['fontcolor2'] . '"'
                     ;break;
                  default: $style_color = '';
               }
               $birthday_today_list .= ' <a href="profile.'.$phpEx.'?mode=viewprofile&amp;' . POST_USERS_URL . '=' . $birthdayrow['user_id'] . '"' . $style_color .'>' . $birthdayrow['username'] . ' ('.$user_age.')</a>,';
            }
         }
         if ($birthday_today_list)
         {
            $birthday_today_list[ strlen( $birthday_today_list)-1] = ' ';
         }
         if ($birthday_week_list)
         {
            $birthday_week_list[ strlen( $birthday_week_list)-1] = ' ';
         }
      }
      $db->sql_freeresult($result);

      if($fp = fopen( $cache_bday_file, "w" ))
      {
         // stores the data set in a cache file
         $bday = "<?php\n";
         $bday .='$birthday_today_list = \'' . addslashes($birthday_today_list) . "';\n";
         $bday .='$birthday_week_list = \'' . addslashes($birthday_week_list) . "';\n?>";
         fwrite($fp, $bday);
         fclose($fp);
         @chmod($cache_bday_file, 0777);
      }
   }
}

#
#----------[ SAVE AND CLOSE ALL FILES ]-----------------
#
# EoM
Das gleiche auch in der portal.php machen (falls vorhanden)!

__


Admins die keinen Categories Hierarchy installiert haben können im obigem Code
Code: Alles auswählen
   $sql = "SELECT user_regdate
      FROM " . USERS_TABLE . "
      WHERE user_id <> " . ANONYMOUS . " AND user_active = 1
      ORDER BY user_id DESC
      LIMIT 0,1";
   $result = $db->sql_query($sql);
   while ($row = mysql_fetch_array($result))
   {
      $newest_regdate = $row['user_regdate'];
   }
   $db->sql_freeresult($result);
durch
Code: Alles auswählen
   $newest_regdate = $newest_userdata['user_regdate'];
ersetzen und zusätzlich noch
Code: Alles auswählen
#
#-----[ OPEN ]------------------------------------------------
#

includes/functions.php

#
#-----[ FIND ]------------------------------------------------
#

      case 'newestuser':
         $sql = "SELECT user_id, username

#
#----------[ INLINE FIND ]------------------------------
#

, username

#
#----------[ INLINE AFTER, ADD ]------------------------
#

, user_regdate

#
#-----[ SAVE/CLOSE FILE ]--------------------------------
#
# EoM
installieren. Wodurch nochmal 1 querie gespart wird. :)

__


Wer den Color Groups installiert hat kann im obigem Code noch
Code: Alles auswählen
#
#-----[ FIND ]----------------------------------------------------------------
#

            if ( $user_birthday2 > $date_today  && $user_birthday2 <= $date_forward )
            {
               // user are having birthday within the next days
               $user_age = ( $this_year.$user_birthday < $date_today ) ? $this_year - realdate ('Y',$birthdayrow['user_birthday'])+1 : $this_year- realdate ('Y',$birthdayrow['user_birthday']);
               switch ($birthdayrow['user_level'])
               {
                  case ADMIN :
                     $birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>';
                     $style_color = 'style="color:#' . $theme['fontcolor3'] . '"'
                     ;break;
                  case MOD :
                     $birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>';
                     $style_color = 'style="color:#' . $theme['fontcolor2'] . '"'
                     ;break;
                  default: $style_color = '';
               }
               $birthday_week_list .= ' <a href="profile.'.$phpEx.'?mode=viewprofile&amp;' . POST_USERS_URL . '=' . $birthdayrow['user_id'] . '"' . $style_color .'>' . $birthdayrow['username'] . ' ('.$user_age.')</a>,';
            }
            else if ( $user_birthday2 == $date_today )
            {
               //user have birthday today
               $user_age = $this_year - realdate ( 'Y',$birthdayrow['user_birthday'] );
               switch ($birthdayrow['user_level'])
               {
                  case ADMIN :
                     $birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>';
                     $style_color = 'style="color:#' . $theme['fontcolor3'] . '"'
                     ;break;
                  case MOD :
                     $birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>';
                     $style_color = 'style="color:#' . $theme['fontcolor2'] . '"'
                     ;break;
                  default: $style_color = '';
               }
               $birthday_today_list .= ' <a href="profile.'.$phpEx.'?mode=viewprofile&amp;' . POST_USERS_URL . '=' . $birthdayrow['user_id'] . '"' . $style_color .'>' . $birthdayrow['username'] . ' ('.$user_age.')</a>,';
            }

#
#-----[ REPLACE WITH ]--------------------------------------------------------
#

            if ( $user_birthday2 > $date_today  && $user_birthday2 <= $date_forward )
            {
               // user are having birthday within the next days
               $user_age = ( $this_year.$user_birthday < $date_today ) ? $this_year - realdate ('Y',$birthdayrow['user_birthday'])+1 : $this_year- realdate ('Y',$birthdayrow['user_birthday']);
               $birthday_today_list .= ' <a href="profile.'.$phpEx.'?mode=viewprofile&amp;' . POST_USERS_URL . '=' . $birthdayrow['user_id'] . '">' . color_group_colorize_name($birthdayrow['user_id'], true) . ' ('.$user_age.')</a>,';
            }
            else if ( $user_birthday2 == $date_today )
            {
               //user have birthday today
               $user_age = $this_year - realdate ( 'Y',$birthdayrow['user_birthday'] );
               $birthday_week_list .= ' <a href="profile.'.$phpEx.'?mode=viewprofile&amp;' . POST_USERS_URL . '=' . $birthdayrow['user_id'] . '">' . color_group_colorize_name($birthdayrow['user_id'], true) . ' ('.$user_age.')</a>,';
            }
ersetzen um die definierten Farbgruppen auch in der Geburtstagsanzeige zu verwenden. :)

Das ganze Basiert auf dem Cache von Niels und einem Cache von easygo.
Zuletzt geändert von AmigaLink am 15. Jan 2006 14:35, insgesamt 3-mal geändert.
Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
Benutzeravatar
AmigaLink
Administrator
 
Beiträge: 3987
Registriert: 11. Aug 2004 01:06
Wohnort: NRW

Beitragvon blondi » 29. Apr 2005 10:19

@amiga

wollte den eben einbauen ud habe bemerkt das ich im cache ordner einen unterordner namens index habe...

und in diesen index ordner sind diese files
birthday_8.00.dat
... ist da schon ein cache eingebaut?
blondi
User
 
Beiträge: 46
Registriert: 27. Feb 2005 00:55

Beitragvon AmigaLink » 29. Apr 2005 11:38

Ja, das ist der Orginal Cache von Niels!
Nachteil ist, der wird alle 2 Stunden erneuert und nicht bei neuregistrierungen.

Dieser hier wird sofort erneuert wenn es einen neuen (aktiven) User gibt und ansonsten nur 1 mal am Tag. Er ist also, im gegensatz zu dem von Niels, immer aktuell und gleichzeitig sogar noch Performanceschonender. 8)
Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
Benutzeravatar
AmigaLink
Administrator
 
Beiträge: 3987
Registriert: 11. Aug 2004 01:06
Wohnort: NRW

Beitragvon blondi » 29. Apr 2005 13:48

oje oje....
kann mich garnicht mehr erinnern den von nils eingebaut zu haben :-((
blondi
User
 
Beiträge: 46
Registriert: 27. Feb 2005 00:55

Beitragvon AmigaLink » 29. Apr 2005 16:44

Vielleicht ist er im DIM bereits drin. Bild

Such mal nen Codeblock der so
Code: Alles auswählen
// Birthday Mod, Show users with birthday
$cache_data_file = "./cache/birthday_". $board_config['board_timezone'] . ".dat";
if (@is_file($cache_data_file))
{
anfängt und so
Code: Alles auswählen
// stores the data set in a cache file
      $data = "<?php\n";
      $data .='$birthday_today_list = ';
      $data .=var_export($birthday_today_list,true);
      $data .=";\n";
      $data .='$birthday_week_list = ';
      $data .=var_export($birthday_week_list,true);
      $data .=";\n?>";
      $fp = fopen( $cache_data_file, "w" );
      fwrite($fp, $data);
      fclose($fp);
     @chmod($cache_data_file, 0777);
}
endet. Diesen Code tauschst du dann gegen den aus dem Snipped aus. :)
Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
Benutzeravatar
AmigaLink
Administrator
 
Beiträge: 3987
Registriert: 11. Aug 2004 01:06
Wohnort: NRW

Beitragvon blondi » 29. Apr 2005 23:15

danke dir werd ich gleich mal machen...


@edit
hab das jetzt eingebaut und mal zum test eine registrierung gemacht....
und als geburtstag morgen 1.05 eingegeben... oben im kalender steht der user dann dabei aber im block auf meiner portalseite links nicht bei user die in den nächsten 3 tagen geburtstag haben...
blondi
User
 
Beiträge: 46
Registriert: 27. Feb 2005 00:55

Beitragvon AmigaLink » 30. Apr 2005 01:40

Ist der neue User aktiv? Solange das neue Userkonto nicht aktiviert wurde, wird auch der Cache nicht extra erneuert!
Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
Benutzeravatar
AmigaLink
Administrator
 
Beiträge: 3987
Registriert: 11. Aug 2004 01:06
Wohnort: NRW

Beitragvon blondi » 1. Mai 2005 16:18

aha... eben probiert, stimmt :-)) ... danke dir, funzt einwandfrei :-))
blondi
User
 
Beiträge: 46
Registriert: 27. Feb 2005 00:55

Beitragvon AmigaLink » 1. Mai 2005 16:33

Fein :)
Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
Benutzeravatar
AmigaLink
Administrator
 
Beiträge: 3987
Registriert: 11. Aug 2004 01:06
Wohnort: NRW

Beitragvon blondi » 1. Mai 2005 16:57

allerdings ist mir eben aufgefallen dass wenn ich den user lösche, er trotzdem noch dabei steht das er z.B heute geburtstag hat... wann löscht sich das dann?

wenn ich dann auf den gelöschten usernamen klicke in der geburtstagsanzeige im portal, kommt dass...

Code: Alles auswählen
Could not update user data.

DEBUG MODE

SQL Error : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3

UPDATE phpbb_users SET user_profile_view = '1' WHERE user_id =

Line : 72
File : usercp_viewprofile.php


lieben gruss
blondi
User
 
Beiträge: 46
Registriert: 27. Feb 2005 00:55

Nächste

Zurück zu phpBB2 Snippets



Wer ist online?

Mitglieder in diesem Forum: Magpie [Crawler] und 1 Gast