[TWEAK] Birthday-Mod auf grossen boards

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
ThaRipsta
Beiträge: 393
Registriert: So 25.Apr, 2004 14:15

[TWEAK] Birthday-Mod auf grossen boards

Beitrag von ThaRipsta »

Hallo

hab mal wieder versucht den birthday mod von niels auf meinem (grosses!!) board zu installieren. Klappt alles wunderbar, ausser:

Wenn ich im ACP die tage einstellen soll, wo nach geburtstagen geguckt wird, wird das board SOOO lahm:

0 tage [keine Anzeige Geburtstage auf dem Index] = normal (fast)
1 Tag = + 4 sek
3 tage = + 6 sekunden generation time

^7

kann man das Verschnellern? Ist nen super Mod!!

Alternative: Mod auf "birthday seite" auslagern :D
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Der Punkt ist:
Es werden alle User mit Geburtstagen abgefragt und bei sehr vielen Usern kann das dann eben schon mal eine Weile dauern.

Die Frage, die sich stellt:
Kann man wirklich die Anzahl Sekunden auf Tage umrechnen, wie es der Birthday-Mod auch in der Datenbank speichert und damit immer noch die korrekten Anzeigen erhalten? Also aktuellen Zeitraum umrechnen und als WHERE-Clausel mit in die SQL-Abfrage packen.
Das würde sicherlich die Anzahl der abgefragten User um einiges verringern und damit beschleunigen...

Ich versuche es mal eben.

EDIT:
Das kann nicht funktionieren, da ja der Geburtstag mit Geburtsjahr in der Datenbank steht, also nicht nur Monat und Tag extra. Und in einem SQL-Statement kann man nur mit Datenbankfunktionen arbeiten, nicht mit externen.
Schade aber auch.
Ich wüsste dann wirklich keine Möglichkeit, das noch zu beschleunigen.

BTW: Über wie viele User reden wir hier überhaupt? Also die mit eingetragenem Geburtstag?

EDIT2:
Hier der Code, den ich für den "zusammenklappbaren" Block auf meinem Index verwende:

In der index.php nach dem Birthday-Abfrage-Block

Code: Alles auswählen

$birth_on = ( $HTTP_POST_VARS['bon'] ) ? $HTTP_POST_VARS['bon'] : $HTTP_GET_VARS['bon'];
if( $birth_on == TRUE )
{
	$template->assign_block_vars('switch_birth_on', array());
	$birth_heading = $lang['Birthday'].'&nbsp;( <a href="'.append_sid("index.$phpEx").'" class="mainmenu">'.$lang['Vhide'].'</a> )';
}
else
{
	$template->assign_block_vars('switch_birth_off', array());
	$birth_heading = '<a href="'.append_sid("index.$phpEx?bon=".TRUE).'" class="mainmenu">'.$lang['Birthday'].'</a>&nbsp;<img src="templates/subSilver/images/down_arrow.gif" border="0"/>';
}
Hier wäre es auch möglich, den Block der nächsten Geburtstage in die Bedingung einzubauen, also einfach den Block nach

Code: Alles auswählen

if( $birth_on == TRUE )
verschieben und die Geburtstage werden erst berechnet, wenn jemand den Block öffnet.

Tabelle für die Anzeigen in der index_body.tpl:

Code: Alles auswählen

<!-- BEGIN switch_birth_on -->
<table width="100%" cellpadding="2" cellspacing="0" border="0" class="forumline">
	<td valign="top">
	  <tr>
		<td class="row4" align="center"><span class="gen"><b>{L_BIRTHDAY}</b></span></td>
	  </tr>
    <tbody id="birth" style="display: ;">
<!-- END switch_birth_on -->
<!-- BEGIN switch_birth_off -->
<table width="100%" cellpadding="2" cellspacing="0" border="0">
	<td valign="top">
	  <tr>
		<td align="left"><span class="gen"><b>{L_BIRTHDAY}</b></span></td>
	  </tr>
    <tbody id="birth" style="display: none;">
<!-- END switch_birth_off -->
	  <tr>
		<td class="row1" align="left"><span class="gensmall">{L_WHOSBIRTHDAY_TODAY}<br />{L_WHOSBIRTHDAY_WEEK}</span></td>
	  </tr>
	</td>
	</tbody>
</table>
Und so sieht der Code in der index.php bei mir jetzt aus und damit spare ich rund eine halbe Sekunde Generation Time, wenn die Box (per Default) nicht auf ist (der Code in der index_body.tpl ist der gleiche wie oben):

Code: Alles auswählen

if ($board_config['birthday_check_day'])
{
	$birth_on = ( $HTTP_POST_VARS['bon'] ) ? $HTTP_POST_VARS['bon'] : $HTTP_GET_VARS['bon'];
	if( $birth_on == TRUE )
	{
		$template->assign_block_vars('switch_birth_on', array());
		$birth_heading = $lang['Birthday'].'&nbsp;( <a href="'.append_sid("index.$phpEx").'" class="mainmenu">'.$lang['Vhide'].'</a> )';

		// Birthday Mod, Show users with birthday 
		$sql = "SELECT user_id, user_birthday 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']); 
			include_once("includes/functions_color_groups.".$phpEx);
			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']); 
			    $birthday_week_list .= ' <a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . 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_today_list .= ' <a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $birthdayrow['user_id']) . '">' . color_group_colorize_name($birthdayrow['user_id'], true) . ' ('.$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); 
		}

	}
	else
	{
		$template->assign_block_vars('switch_birth_off', array());
		$birth_heading = '<a href="'.append_sid("index.$phpEx?bon=".TRUE).'" class="mainmenu">'.$lang['Birthday'].'</a>&nbsp;<img src="templates/subSilver/images/down_arrow.gif" border="0"/>';
	}
}
$lang['Vhide'] müsste dann ggf. noch in der lang_main.php definiert werden.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
ThaRipsta
Beiträge: 393
Registriert: So 25.Apr, 2004 14:15

Beitrag von ThaRipsta »

super, danke!! Ich versuchs gleich morgen mal! :))
ThaRipsta
Beiträge: 393
Registriert: So 25.Apr, 2004 14:15

Beitrag von ThaRipsta »

hmm..irgendwie komme ich nicht zurecht :(

Was füge ich in der index.php hinter was ein?

(nach dem birthday block, deinen ersten code einfügen?)

Einbauen in bedingung verstehe ich auch nicht :D

Und deinen Code für die tpl ANSTATT des codes in der howto benutzen?

soweit richtig verstanden? :D
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Häng mal Deine index.php und index_body.tpl an. Ich bau das dann da mal ein.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
ThaRipsta
Beiträge: 393
Registriert: So 25.Apr, 2004 14:15

Beitrag von ThaRipsta »

Viola:

und danköö ^b
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

So, probiers aus.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
ThaRipsta
Beiträge: 393
Registriert: So 25.Apr, 2004 14:15

Beitrag von ThaRipsta »

HI,

habs ausprobiert, und folgendes ergebnis:

(siehe bild)

Ausserdem Ist die Abfrage der geburtstage fehlerhaft, denn es hat 1 Person in den nächsten 2 tagen geburtstag
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Und mit diesem hier?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
ThaRipsta
Beiträge: 393
Registriert: So 25.Apr, 2004 14:15

Beitrag von ThaRipsta »

die tabelle ist jetzt nicht mehr verschoben, jedoch ist das "birthday" nicht clickbar --> kein weiteres fenster öffnet sich!!

mit dem alten index wird der normale geburtstags-block statt dem "birthday" angezeigt

Mit deinem Index lädt die seite auf jeden fall schneller!! jedoch wird nichts angezeigt ;))
Zuletzt geändert von ThaRipsta am Do 17.Jun, 2004 10:37, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

:lol:
Ich hab ja auch vergessen, den Link einzubauen. *vordenkopfklatscht*
Hier die korrekte Datei.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
ThaRipsta
Beiträge: 393
Registriert: So 25.Apr, 2004 14:15

Beitrag von ThaRipsta »

hehe!!

SUPER, DANGÖ! funktioniert jetzt alles super!! :D
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Keine Ursache.
Und das Laden geht wie gewohnt.
Wenn dann die Geburtstage sehen will, soll halt warten ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten