Today/yesterday-Mod und Birthday-Mod

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
Benutzeravatar
bce
Beiträge: 858
Registriert: Do 14.Okt, 2004 18:46
Kontaktdaten:

Today/yesterday-Mod und Birthday-Mod

Beitrag von bce »

hallo.
habe soeben den "Today/yesterday-Mod" eingebaut.
das mit der anzeige passt wunderbar: eintrag wurde heute um so und so geschrieben...

aber ein kleines problem tut sich un auf: irgendwas scheint sich mit dem birthday-mod zu beisen, da sich immer wenn ich auf ne andere seite im forum klicke, öffnet sich eine pop:
"Hui! Wir kommen zu spät zu deinem xxten Geburtstag, der am xx.xx. war, stimmt's? Wir wünschen dir auch nachträglich noch alles Gute und hoffen, dass du einen schönen Purzeltag hattest."
dieses pop-up müßte doch normalerweise nur einmal erscheinen?!

und die anzeige im calendar lite 1.4.4 haut nimmer so richtig hin. nun steht bei den usern nicht mehr das alter, sondern das geburtsjahr mit einem minus davor?!
darüber hinaus kommt im calendar folgende meldung:
Warning: checkdate() expects parameter 1 to be long, string given in C:\Programme\xampplite\htdocs\forum\cal_lite.php on line 187
für die today/yesterday anzeige mußte ich in der functions folgendes:

Code: Alles auswählen

return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * ($tz+date("I")))), $translate) : @gmdate($format, $gmepoch + (3600 * ($tz+date("I"))));
mit dem:

Code: Alles auswählen

// friendly date mod\\*******************

	$thetime = ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * $tz)), $translate) : @gmdate($format, $gmepoch + (3600 * $tz));
	
	$L_Today = 'Today';
	$L_Yesterday = 'Yesterday';
	$time_format = " - h:i a";// - hour:minute am/pm
	
	$date = getdate();
	$today = $date['mday'];
	$month = $date['mon'];
	$year = $date['year'];

	$forum_date_today = @gmdate ("d", $gmepoch);
	$forum_date_month = @gmdate ("m", $gmepoch);
	$forum_date_year = @gmdate ("Y", $gmepoch);
	
	if ($forum_date_today == $today && $forum_date_month == $month && $forum_date_year == $year)
		$thetime = $L_Today . @gmdate ($time_format, $gmepoch);//today
	
	else
	if ($today != 1 && $forum_date_today == ($today-1) && $forum_date_month == $month && $forum_date_year == $year)
		$thetime = $L_Yesterday . @gmdate ($time_format, $gmepoch);//yesterday
		
	else
	//if today is 1 and the month is not 1, then we have to check how many days in the previews month
	//and then set $yesterday to the last day in the previews month
	if ($today == 1 && $month != 1)
	{
	$yesterday = date ("t", mktime(0,0,0,($month-1),1,$year));//returns how many days in the previews month
	if ($forum_date_today == $yesterday && $forum_date_month == ($month-1) && $forum_date_year == $year)
		$thetime = $L_Yesterday . @gmdate ($time_format, $gmepoch);//yesterday
	}
	else 
	//if we are in the first day in the year
	if ($today == 1 && $month == 1)
	{
	$yesterday = date ("t", mktime(0,0,0,12,1,($year -1)));
	if ($forum_date_today == $yesterday && $forum_date_month == 12 && $forum_date_year == ($year-1))
		$thetime = $L_Yesterday . @gmdate ($time_format, $gmepoch);//yesterday
	}

   	return ($thetime);
//end friendly date \\*******************************
und es ist eine stunde zu spät.. statt 14 ist es erst 13 uhr...

was haut da nicht richtig hin?
thx

++++++++++++++++++++++++++++++++
nachtrag:
habe nun in der function den "Today/yesterday-Mod" rausgenommen und wieder

Code: Alles auswählen

return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * ($tz+date("I")))), $translate) : @gmdate($format, $gmepoch + (3600 * ($tz+date("I"))));
eingebunden.. und es funktioniert.. sowohl der birthday-mod, als auch der calendar lite mod.

gibt es eine alternative zu diesem "Today/yesterday-Mod" ?

ziel ist es im forum bei den beiträgen "heute" oder "gestern" stehen zu haben...
easygo
Beiträge: 155
Registriert: Fr 22.Okt, 2004 13:20
Kontaktdaten:

Beitrag von easygo »

Hy, durch "Last Post" vielleicht ^^

Auszug aus der functions:

Code: Alles auswählen

				if ( $board_config['time_today'] < $data['post_time'])
				{
				$last_post .= sprintf($lang['Today_at'], create_date($board_config['default_timeformat'], $data['post_time'], $board_config['board_timezone'])) . '<br />';
				}
				else if ( $board_config['time_yesterday'] < $data['post_time'])
				{
				$last_post .= sprintf($lang['Yesterday_at'], create_date($board_config['default_timeformat'], $data['post_time'], $board_config['board_timezone'])) . '<br />';
				}
				else
				{
				$last_post .= $last_post_time . '<br />';
				}
mfg
easygo
Diskutiere nie mit einem Idioten: Erst zieht er dich auf sein
Niveau runter und dort schl?gt er dich mit Erfahrung.
Benutzeravatar
bce
Beiträge: 858
Registriert: Do 14.Okt, 2004 18:46
Kontaktdaten:

Beitrag von bce »

hallo.. danke für deine antwort..

habe zusätzlich folgendes gefunden:
http://www.phpbb2-users.de/viewtopic.ph ... terday+mod

in den einzelnen foren wird nun die beitrags-zeit entsprechend mit heute und gestern ausgegeben, nicht aber auf der foren-überblicks-seite..
wie heißt die? wei viewforum hab ich ja geändert lautet der anleitung..

so solls auch auf der foren-überblicks-seite aussehen:
Benutzeravatar
bce
Beiträge: 858
Registriert: Do 14.Okt, 2004 18:46
Kontaktdaten:

Beitrag von bce »

ok..
hat sich erledigt.

in der index mußte an 3 stellen der code geändert werden ;)

nun klappts
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Re: Today/yesterday-Mod und Birthday-Mod

Beitrag von Dungeonwatcher »

Hi! :cool:

[quote="bce - Mi 24.Nov, 2004 15:09";p="17537"]hallo.
habe soeben den "Today/yesterday-Mod" eingebaut.
das mit der anzeige passt wunderbar: eintrag wurde heute um so und so geschrieben...

aber ein kleines problem tut sich un auf: irgendwas scheint sich mit dem birthday-mod zu beisen, da sich immer wenn ich auf ne andere seite im forum klicke, öffnet sich eine pop:
"Hui! Wir kommen zu spät zu deinem xxten Geburtstag, der am xx.xx. war, stimmt's? Wir wünschen dir auch nachträglich noch alles Gute und hoffen, dass du einen schönen Purzeltag hattest."
dieses pop-up müßte doch normalerweise nur einmal erscheinen?!

und die anzeige im calendar lite 1.4.4 haut nimmer so richtig hin. nun steht bei den usern nicht mehr das alter, sondern das geburtsjahr mit einem minus davor?![/quote]

Genau dieses Problem taucht auch geade bei meinem Forum auf. Nur das ich den "Friendly date mod" vor ca. 'nem Jahr eingebaut hatte und und jetzt den "aktuellen Birthday Mod". Den Kalender habe ich nicht eingebaut., aber das Alter wird in der Topicanzeige und der Statistik so angezeigt. :(

Aus diesem Thread werde ich jedoch nicht schlau was die Lösung dieses Problems angeht. :confused:

Bye/2

PS: Ich hänge mal meine "funktions.php" als Anhang mit ran.
Zuletzt geändert von Dungeonwatcher am Di 31.Mai, 2005 18:12, insgesamt 2-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Der Birthday Mod verwendet auch create_date() und da ist ja der Friendly Mod eingebaut.
Der hier in der Hackliste verfügbare "echte" Today/Yesterday Mod stellt eine neue Funktion (create_date_day) bereit, mit der man das Datum entsprechend berechnen lassen kann. Und die ursprüngliche Funktion kann weiterhin für "Problemfälle" benutzt werden.
So ist das auch hier auf OXPUS.de gelöst worden.
Ansonsten müsste man hier eine Ausnahme programmieren, die nicht unbedingt im Sinne des Erfinders ist. Naja, so in etwa:

Code: Alles auswählen

#
#-----[ OPEN ]-----
#
includes/functions.php

#
#-----[ FIND ]-----
#
function create_date($format, $gmepoch, $tz)
{
	global $board_config, $lang;
	static $translate;

	if ( empty($translate) && $board_config['default_lang'] != 'english' )
	{
		@reset($lang['datetime']);
		while ( list($match, $replace) = @each($lang['datetime']) )
		{
			$translate[$match] = $replace;
		}
	}

// friendly date mod \\*******************

// $thetime = (!empty($translate)) ? strtr(@gmdate($format, $gmepoch + (3600 * $tz)), $translate) : @gmdate($format, $gmepoch + (3600 * $tz));
// $thetime = (!empty($translate)) ? strtr(@gmdate($format, $gmepoch + (3600 * ($tz+date("I")))), $translate) : @gmdate($format, $gmepoch + (3600 * ($tz+date("I"))));
$thetime = (!empty($translate)) ? strtr(@gmdate($format, $gmepoch + (3600 * ($tz+date("I",$gmepoch)))), $translate) : @gmdate($format, $gmepoch + (3600 * ($tz+date("I",$gmepoch))));

$L_Today = '<b>Heute</b> um';
$L_Yesterday = '<b>Gestern</b> um';
$time_format = " H:i";

$date = getdate();
$today = $date['mday'];
$month = $date['mon'];
$year = $date['year'];

$forum_date_today = @gmdate ("d", $gmepoch + (3600 * $tz));
$forum_date_month = @gmdate ("m", $gmepoch + (3600 * $tz));
$forum_date_year = @gmdate ("Y", $gmepoch + (3600 * $tz));

if($forum_date_today == $today && $forum_date_month == $month && $forum_date_year == $year)
{
//today
$thetime = $L_Today . @gmdate ($time_format, $gmepoch + (3600 * $tz));
}

else
{
if($today != 1 && $forum_date_today == ($today-1) && $forum_date_month == $month && $forum_date_year == $year)
{
//yesterday
$thetime = $L_Yesterday . @gmdate ($time_format, $gmepoch + (3600 * $tz));
}

else
{
//if today is 1 and the month is not 1, then we have to check how many days in the
// previews month and then set $yesterday to the last day in the previews month
if($today == 1 && $month != 1)
{
//returns how many days in the previews month
$yesterday = date ("t", gmmktime(0,0,0,($month-1),1,$year) + (3600 * $tz));

if($forum_date_today == $yesterday && $forum_date_month == ($month-1) && $forum_date_year == $year)
{
//yesterday
$thetime = $L_Yesterday . @gmdate ($time_format, $gmepoch + (3600 * $tz));
}
}

else
{
//if we are in the first day in the year
if($today == 1 && $month == 1)
{
$yesterday = date("t", gmmktime(0,0,0,12,1,($year -1)) + (3600 * $tz));

if($forum_date_today == $yesterday && $forum_date_month == 12 && $forum_date_year == ($year-1))
{
//yesterday
$thetime = $L_Yesterday . @gmdate ($time_format, $gmepoch + (3600 * $tz));
}
}
}
}
}

return($thetime);
}

#
#-----[ REPLACE WITH ]-----
#
function create_date($format, $gmepoch, $tz, $friendly = TRUE)
{
	global $board_config, $lang;
	static $translate;

	if ( empty($translate) && $board_config['default_lang'] != 'english' )
	{
		@reset($lang['datetime']);
		while ( list($match, $replace) = @each($lang['datetime']) )
		{
			$translate[$match] = $replace;
		}
	}

	if ($friendly == TRUE)
	{
		// friendly date mod \\*******************

		// $thetime = (!empty($translate)) ? strtr(@gmdate($format, $gmepoch + (3600 * $tz)), $translate) : @gmdate($format, $gmepoch + (3600 * $tz));
		// $thetime = (!empty($translate)) ? strtr(@gmdate($format, $gmepoch + (3600 * ($tz+date("I")))), $translate) : @gmdate($format, $gmepoch + (3600 * ($tz+date("I"))));
		$thetime = (!empty($translate)) ? strtr(@gmdate($format, $gmepoch + (3600 * ($tz+date("I",$gmepoch)))), $translate) : @gmdate($format, $gmepoch + (3600 * ($tz+date("I",$gmepoch))));

		$L_Today = '<b>Heute</b> um';
		$L_Yesterday = '<b>Gestern</b> um';
		$time_format = " H:i";

		$date = getdate();
		$today = $date['mday'];
		$month = $date['mon'];
		$year = $date['year'];

		$forum_date_today = @gmdate ("d", $gmepoch + (3600 * $tz));
		$forum_date_month = @gmdate ("m", $gmepoch + (3600 * $tz));
		$forum_date_year = @gmdate ("Y", $gmepoch + (3600 * $tz));

		if($forum_date_today == $today && $forum_date_month == $month && $forum_date_year == $year)
		{
		//today
		$thetime = $L_Today . @gmdate ($time_format, $gmepoch + (3600 * $tz));
		}

		else
		{
		if($today != 1 && $forum_date_today == ($today-1) && $forum_date_month == $month && $forum_date_year == $year)
		{
		//yesterday
		$thetime = $L_Yesterday . @gmdate ($time_format, $gmepoch + (3600 * $tz));
		}

		else
		{
		//if today is 1 and the month is not 1, then we have to check how many days in the
		// previews month and then set $yesterday to the last day in the previews month
		if($today == 1 && $month != 1)
		{
		//returns how many days in the previews month
		$yesterday = date ("t", gmmktime(0,0,0,($month-1),1,$year) + (3600 * $tz));

		if($forum_date_today == $yesterday && $forum_date_month == ($month-1) && $forum_date_year == $year)
		{
		//yesterday
		$thetime = $L_Yesterday . @gmdate ($time_format, $gmepoch + (3600 * $tz));
		}
		}

		else
		{
		//if we are in the first day in the year
		if($today == 1 && $month == 1)
		{
		$yesterday = date("t", gmmktime(0,0,0,12,1,($year -1)) + (3600 * $tz));

		if($forum_date_today == $yesterday && $forum_date_month == 12 && $forum_date_year == ($year-1))
		{
		//yesterday
		$thetime = $L_Yesterday . @gmdate ($time_format, $gmepoch + (3600 * $tz));
		}
		}
		}
		}
		}

		return($thetime);
	}
	else
	{
		return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * ($tz+date("I")))), $translate) : @gmdate($format, $gmepoch + (3600 * ($tz+date("I"))));
	}
}
Zum Aufruf der Funktion mit create_date() muss nun als 4. Parameter eine "0" eingetragen werden, damit der Friendly Mod nicht ausgeführt wird.
Also z.B.:

Code: Alles auswählen

create_date($userdata['user_dateformat'], $postrow[$i]['post_time'], $userdata['user_timezone'], 0)
Ursprünglich sähe das so aus:

Code: Alles auswählen

create_date($userdata['user_dateformat'], $postrow[$i]['post_time'], $userdata['user_timezone'])
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!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Hi! :cool:

Sorry, aber ich verstehe jetzt nur Bahnhof. :confused:

Soll ich den o.g. Script einbauen? Ich hab's testweise getan, aber ohne Erfolg. Ebenso finde ich beiden u.g. Strings nirgendwo. Oder soll/muss ich den "echten" Mod einbauen? Aber auch dort finde ich geforderte Strings nicht. :confused:
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Also:
Der Code, den ich zuerst gepostet habe, musst Du einbauen.
Dann die Funktion finden, mit der die Geburtstage falsch dargestellt werden und in diesem create_date() als 4. Parameter eine "0" eintragen.
Die beiden letzten Strings sind nur Beispiele, um zu zeigen, wie die "0" dort einzutragen ist.
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!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Moin! :cool:

Mannn, da habe ich aber auf dem Schlauch gestanden. :rolleyes:

Für den Birthday Mod habe ich in die "viewtopic.php" das jetzt so eingetragen.

Von so:

Code: Alles auswählen

// Start add - Birthday MOD
$this_year = create_date('Y', time(), $board_config['board_timezone']);
$this_date = create_date('md', time(), $board_config['board_timezone']);
// End add - Birthday MOD
auf auf so:

Code: Alles auswählen

// Start add - Birthday MOD
$this_year = create_date('Y', time(), $board_config['board_timezone'], 0);
$this_date = create_date('md', time(), $board_config['board_timezone'], 0);
// End add - Birthday MOD
Analog dazu wurde es in der "index.php", "page_header.php" und "birthday_popup.php" eingetragen. Das Alter wird jetzt korrekt angezeigt, nur das Popup nervt weiterhin.

Da wird wohl noch ein Parameter in letzterer fehlen:

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//

$gen_simple_header = TRUE; 
$page_title = $lang['Greeting_Messaging']; 
include($phpbb_root_path . 'includes/page_header.'.$phpEx); 
$year=create_date('Y', time(), $board_config['board_timezone'], 0);
$date_today = create_date('Ymd', time(), $board_config['board_timezone'], 0);
$user_birthday=realdate("md",$userdata['user_birthday']); 
$user_birthday2=(($year.$user_birthday<$date_today)? $year+1:$year).$user_birthday; 
$l_greeting = ($user_birthday2==$date_today) ? 
	sprintf ( $lang['Birthday_greeting_today'], date('Y')-realdate('Y',$userdata['user_birthday']) ) :
	sprintf ( $lang['Birthday_greeting_prev'],  date('Y')-realdate('Y',$userdata['user_birthday']) , realdate(str_replace('Y','',$lang['DATE_FORMAT']),$userdata['user_birthday']) ); 
$template->set_filenames(array( 
      'body' => 'greeting_popup.tpl')); 
$template->assign_vars(array( 
      'L_CLOSE_WINDOW' => $lang['Close_window'], 
      'L_MESSAGE' => $l_greeting )); 
$template->pparse('body'); 
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); 

?>
Bye/2 :anbet
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Die Datei ist i.O., aber in der page_header.php muss dieser Aufruf enthalten sein:

Code: Alles auswählen

 	// see if user has or have had birthday, also see if greeting are enabled
	if ( $userdata['user_birthday']!=999999 && $board_config['birthday_greeting'] && create_date('Ymd', time(), $board_config['board_timezone'])  >= $userdata['user_next_birthday_greeting'].realdate ('md',$userdata['user_birthday'] ) )
	{
		$sql = "UPDATE " . USERS_TABLE . "
			SET user_next_birthday_greeting = " . (create_date('Y', time(), $board_config['board_timezone'])+1) . "
			WHERE user_id = " . $userdata['user_id'];
		if ( !$db->sql_query($sql) )
		{
			message_die(GENERAL_ERROR, 'Could not update user data for popups', '', __LINE__, __FILE__, $sql);
		}

		$template->assign_var("GREETING_POPUP",
		"<script language=\"Javascript\" type=\"text/javascript\"><!--
		   window.open('".append_sid('birthday_popup.'.$phpEx)."', '_phpbbprivmsg', 'HEIGHT=225,resizable=yes,WIDTH=400');
		  //-->
		</script>");
	} //Sorry user shall not have a greeting this year
Also mit Bedingung und SQL.
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