Seite 3 von 6

Verfasst: 26.04.2005 23:39
von easygo
AmigaLink hat geschrieben:Bei mir nicht! :cry:
:o dann check das mal bitte -->

Update Time Control

Einfach den Code als php file speichern, die Datei in dein
Forum-Verzeichnis hochladen und aufrufen...

Verfasst: 27.04.2005 01:43
von John Doe
Hab ich das richtig verstanden, wenn mir Dein Testscript

Code: Alles auswählen

Newest User Registration Date

UNIX Time:
Time Format: 01.01.1970, 01:00:00

zurückgibt, dass das dann nicht funktioniert ?

Verfasst: 27.04.2005 02:20
von easygo
Jo... also wenn das so ist (vanilla phpbb)

Code: Alles auswählen

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

#
#-----[ FIND ]------------------------------------------------
#
		case 'newestuser':
			$sql = "SELECT user_id, username

# 
#-----[ REPLACE WITH ]------------------------------------------ 
#
		case 'newestuser':
			$sql = "SELECT user_id, username, user_regdate

#
#-----[ SAVE/CLOSE FILE ]--------------------------------
#
# EoM
Hab ich wohl ein bisschen viel vorausgesetzt. :oops:

Asche über mein Haupt. :D easy

Verfasst: 27.04.2005 02:24
von AmigaLink
Ja, da bin ich schon selber hintergekommen. Aber leider nützt mir das nichts, den ich habe den CH 2.0.5 rc2 installiert, der wiederum diese Daten Cached und wie dieser Cache Funktioniert hab ich noch nicht kapiert. :(

Verfasst: 27.04.2005 02:33
von easygo
Kannst du ja testweise mal auskommentieren den CH cache...

Code: Alles auswählen

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

# 
#-----[ FIND ]------------------------------------------------ 
# 
define('CACHE_WORDS', true);
define('CACHE_THEMES', true);
define('CACHE_SMILIES', true);
define('CACHE_RANKS', true);
define('CACHE_BIRTHDAY', true);
define('CACHE_TREE', true);

# 
#-----[ REPLACE WITH ]------------------------------------------ 
# 
/*
define('CACHE_WORDS', true);
define('CACHE_THEMES', true);
define('CACHE_SMILIES', true);
define('CACHE_RANKS', true);
define('CACHE_BIRTHDAY', true);
define('CACHE_TREE', true);
*/

# 
#-----[ SAVE/CLOSE FILE ]-------------------------------- 
# 
# EoM
Ich seh aber net, wo sich die 2 in die Quere kommen...

function get_db_stat($mode) und CH 2.0.5 rc2

Verfasst: 27.04.2005 02:50
von AmigaLink
Den cache der Userdaten kann man in der functions_cache.php nicht abschalten. :(

Testweise hab ich mal in der functions.php diesen teil auskommentiert

Code: Alles auswählen

//-- mod : cache -----------------------------------------------------------------------------------
//-- add
	global $board_config;

	// first inits
	if ( !isset($board_config['max_users']) || !isset($board_config['record_last_user_id']) || !isset($board_config['record_last_username']) )
	{
		users_stats();
		cache_birthday();
	}
	if ( !isset($board_config['max_posts']) || !isset($board_config['max_topics']) )
	{
		board_stats();
	}
	switch ( $mode )
	{
		case 'usercount':
			return intval($board_config['max_users']);
			break;
		case 'newestuser':
			$row = array( 'user_id' => intval($board_config['record_last_user_id']), 'username' => $board_config['record_last_username']);
			return $row;
			break;
		case 'postcount':
			return intval($board_config['max_posts']);
			break;
		case 'topiccount':
			return intval($board_config['max_topics']);
			break;
	}
//-- fin mod : cache -------------------------------------------------------------------------------
woraufhin es auch funktioniert. Aber das ist ja nicht der Sinn der sache! :(

Verfasst: 27.04.2005 03:05
von easygo
Hast Recht! Das wär 2matsch. :D

Langt bestimmt, wenn du die Zeile auskommentierst

Code: Alles auswählen

     users_stats(); 
Oder? Vielleicht gibts ja noch ne andere Möglichkeit schnell
an newest_regdate zu kommen, mal schaun...

Verfasst: 27.04.2005 13:00
von AmigaLink
Nö, bringt nix.
Meine Experimente bezüglich dieses Caches scheitern aber nicht zum erstem mal. :(

Ich hab deinen Code jetzt so modifiziert und er läuft bei mir einwandfrei. :)

Code: Alles auswählen

$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 1";
	$result = $db->sql_query($sql);
	while ($row = mysql_fetch_array($result))
	{
		$newest_regdate = $row['user_regdate'];
	}

	$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; 
} 
Damit wird kein anderer Mod benötigt! (Auch kein TODAY AT) :)

// EDIT
Code korregiert

Verfasst: 27.04.2005 13:58
von easygo
AmigaLink hat geschrieben:Ich hab deinen Code jetzt so modifiziert und er läuft bei mir einwandfrei.


Das ist die Hauptsache! :grin: Gute Lösung, aber warum YzH ?

Y = Jahr
z = Tag eines Jahres
H = 24 Stunden - Format

Code: Alles auswählen

(((date('YzH',time()) - date('YzH',$last_update_time))<1)
Würde bedeuten, das Update erfolgt stündlich. Wozu?

Besser wäre hier...

Code: Alles auswählen

(((date('Ymd',time()) - date('Ymd',$last_update_time)) == 0)
oder von mir aus auch...

Code: Alles auswählen

(((date('Yz',time()) - date('Yz',$last_update_time)) == 0)
... weil dann hätten wir das Update 1x täglich jeweils beim ersten
Besuch pro Zeitzone mit Ausnahme von newest_regdate.

Dein Modify (mit einer Query mehr) sollte dann ungefähr so aussehn...

Code: Alles auswählen

$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)) == 0) && ((time() - $newest_regdate) > (time() - $last_update_time) )) ? true : false;
}
else
{
   $valid = false;
}
Könnte passen oder was meinst du?

Verfasst: 27.04.2005 15:09
von AmigaLink
Jetzt ist mir das gleiche passiert wie dir (weiter oben). :-? Das H war natürlich nur zum Testen der aktualisierung!

<1 übrigens für den Fall das daß Cachefile älter als 1 Tag ist. Mit ==0 hätteste in dem Fall ein Problem. ;)

// EDIT

Hab meinen Code mal Korregiert.
Ausserdem gibt es auf meiner Seite eine kleine zusammenfassung des ganzen. :)