Ergänzungen für phpBB einfügen! Wie?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Christoph
Mitglied
Beiträge: 82
Registriert: 20.05.2003 21:33
Wohnort: Bochum
Kontaktdaten:

Ergänzungen für phpBB einfügen! Wie?

Beitrag von Christoph »

Hallo zusammen,

ich habe mir einige Ergänzungen für phpBB geschrieben, die das Board in Hinsicht auf Features verbessert. Es handelt sich dabei um eine Anzeige der "Top Poster", der "Neusten User", der User mit den meisten Profilaufrufen. Außerdem noch ein Modul mit dem ich die letzten LogIns anzeige lassen will. Diese Module sollen in allen Templates als Platzhalter verfügbar sein. Bedeutet: Der Platzhalter {TOPPOSTER} soll also den Inhalt der Variable des Moduls im Template darstellen.

Ich habe mir nun ein entsprechendes Script für diese Funktionen geschrieben und dieses Testhalber mal in einige Dateien eingefügt, damit ich eben die Platzhalter im Template angezeigt bekommen. Allerdings wird durch dieses Script der komplette Server ausgelastet und die CPU macht nichts mehr, außer den Server runterfahren.
Meine Frage nun: Was an meinem Script ist falsch gecodet und wo muss ich dieses Script genau einfügen, damit ich entsprechende Platzhalter in den Templates mit den Variablen ersetzen kann? Muss ich das in jede PHP-Datei von phpBB einfügen, oder gibt es da eine globale, wo die Platzhalter dann überall Funktionieren?

Bin dankbar für Hilfe und Tipps.

Gruß
Christoph

Code: Alles auswählen

// Begin Top Posters on Index
if ($board_config['top_posters'])
{
        $top_posters = $board_config['top_posters'];

        $sql = "SELECT username, user_id, user_level, user_posts, user_photo, user_from, user_gender, user_birthday
                FROM " . USERS_TABLE . "
                WHERE user_id <> " . ANONYMOUS . "
                ORDER BY user_posts DESC LIMIT 3";
        if( !($result = $db->sql_query($sql)) )
        {
        message_die(GENERAL_ERROR, 'Could not Query Top Posting Users', '', __LINE__, __FILE__, $sql);
        }

        $user_count = $db->sql_numrows($result);
        $user_data = $db->sql_fetchrowset($result);

        $firstcount = $user_data[0]['user_posts'];
        $total_posts = get_db_stat('postcount');
        $total_top_posters = 0;
        $top_posters_userlist = '';
        $seperator         = '<br>';

        for ($i = 0; $i < $user_count; $i++)
        {
    if (empty($user_data[$i]['user_photo'])){
    $user_photo = 'images/photos/keinbild.jpg';
    } else
    {
    $user_photo = 'images/photos/'.$user_data[$i]['user_photo'];
    }

if ($user_data[$i]['user_birthday'] == '999999')
{
$user_birthday = "";
} else
{
$this_year = create_date('Y', time(), $board_config['board_timezone']);
$this_date = create_date('md', time(), $board_config['board_timezone']);
$poster_birthdate=realdate('md', $user_data[$i]['user_birthday']);
$poster_age = $this_year - realdate ('Y',$user_data[$i]['user_birthday']);
if ($this_date < $poster_birthdate) $poster_age--;
$poster_age = $poster_age;
$user_birthday = $poster_age.' Jahre';
}

                        if( $user_data[$i]['user_gender'] == 1) {
                        $usergender = "<img src='templates/subSilver/images/icon_minigender_male.gif' width='11' height='11' border='0'>";
                        }
                        if( $user_data[$i]['user_gender'] == 2) {
                        $usergender = "<img src='templates/subSilver/images/icon_minigender_female.gif' width='11' height='11' border='0'>";
                        }
                        if( $user_data[$i]['user_gender'] == 0) {
                        $usergender = "";
                        }

                $top_posters_userlist .= (( ($top_posters_userlist) && ($user_data[$i]['user_id']) ) ? $seperator : '') .'<div class="Layer" id="tp_'.$i.'"><table width="110" border="0" cellspacing="1" cellpadding="5" bgcolor="#CC0000"><tr><td bgcolor="#EEEEEE"><img src="'.$user_photo.'" width="100" height="120" border="0"><br><br><span class="gensmall"><b>Alter:</b> '.$user_birthday.'<br><b>Geschlecht:</b> '.$usergender.'<br><b>Aus:</b> '.$user_data[$i]['user_from'].'</span></td></tr></table></div><b>» <a href="profile.'. $phpEx .'?mode=viewprofile&u='. $user_data[$i]['user_id'] .'" onMouseOver="showLAYER(\'tp_'.$i.'\')" onMouseOut="hideLAYER()" class="mainmenu">'. $user_data[$i]['username'] .'</a></b><br><span class="gensmall">'. $user_data[$i]['user_posts'] .' Posts</span>';
                $total_top_posters++;
        }
}
// End Top Posters on Index

// Most Wanted
        $sql = "SELECT user_id, username, user_profile_views, user_photo, user_from, user_gender, user_birthday
            FROM " . USERS_TABLE . "
            WHERE user_active = '1'
            ORDER BY user_profile_views DESC LIMIT 3";

        if( !($result = $db->sql_query($sql)) )
        {
        message_die(GENERAL_ERROR, 'Could not Query Top Posting Users', '', __LINE__, __FILE__, $sql);
        }

        $user_count = $db->sql_numrows($result);
        $user_data = $db->sql_fetchrowset($result);

        $firstcount = $user_data[0]['user_profile_views'];
        $total_top_posters = 0;
        $top_posters_userlist_mostwanted = '';
        $seperator = '<br>';

        for ($i = 0; $i < $user_count; $i++)
        {

    if (empty($user_data[$i]['user_photo'])){
    $user_photo = 'images/photos/keinbild.jpg';
    } else
    {
    $user_photo = 'images/photos/'.$user_data[$i]['user_photo'];
    }

if ($user_data[$i]['user_birthday'] == '999999')
{
$user_birthday = "";
} else
{
$this_year = create_date('Y', time(), $board_config['board_timezone']);
$this_date = create_date('md', time(), $board_config['board_timezone']);
$poster_birthdate=realdate('md', $user_data[$i]['user_birthday']);
$poster_age = $this_year - realdate ('Y',$user_data[$i]['user_birthday']);
if ($this_date < $poster_birthdate) $poster_age--;
$poster_age = $poster_age;
$user_birthday = $poster_age.' Jahre';
}

                        if( $user_data[$i]['user_gender'] == 1) {
                        $usergender = "<img src='templates/subSilver/images/icon_minigender_male.gif' width='11' height='11' border='0'>";
                        }
                        if( $user_data[$i]['user_gender'] == 2) {
                        $usergender = "<img src='templates/subSilver/images/icon_minigender_female.gif' width='11' height='11' border='0'>";
                        }
                        if( $user_data[$i]['user_gender'] == 0) {
                        $usergender = "";
                        }

                $top_posters_userlist_mostwanted .= (( ($top_posters_userlist_mostwanted) && ($user_data[$i]['user_id']) ) ? $seperator : '') .'<div class="Layer" id="mw_'.$i.'"><table width="110" border="0" cellspacing="1" cellpadding="5" bgcolor="#CC0000"><tr><td bgcolor="#EEEEEE"><img src="'.$user_photo.'" width="100" height="120" border="0"><br><br><span class="gensmall"><b>Alter:</b> '.$user_birthday.'<br><b>Geschlecht:</b> '.$usergender.'<br><b>Aus:</b> '.$user_data[$i]['user_from'].'</span></td></tr></table></div><b>» <a href="profile.'. $phpEx .'?mode=viewprofile&u='. $user_data[$i]['user_id'] .'" onMouseOver="showLAYER(\'mw_'.$i.'\')" onMouseOut="hideLAYER()" class="mainmenu">'. $user_data[$i]['username'] .'</a></b><br><span class="gensmall">'. $user_data[$i]['user_profile_views'] .' Views</span>';
                $total_top_posters++;
        }
// Most Wanted

// Die Neuen
        $sql = "SELECT user_id, username, user_regdate, user_photo, user_from, user_gender, user_birthday
            FROM " . USERS_TABLE . "
            WHERE user_active = '1'
            ORDER BY user_id DESC LIMIT 3";

        if( !($result = $db->sql_query($sql)) )
        {
        message_die(GENERAL_ERROR, 'Could not Query Top Posting Users', '', __LINE__, __FILE__, $sql);
        }

        $user_count = $db->sql_numrows($result);
        $user_data = $db->sql_fetchrowset($result);

        $firstcount = $user_data[0]['user_profile_views'];
        $total_top_posters = 0;
        $top_posters_userlist_dieneuen = '';
        $seperator = '<br>';


        for ($i = 0; $i < $user_count; $i++)
        {

if (empty($user_data[$i]['user_photo'])){
$user_photo = 'images/photos/keinbild.jpg';
} else
{
$user_photo = 'images/photos/'.$user_data[$i]['user_photo'];
}

if ($user_data[$i]['user_birthday'] == '999999')
{
$user_birthday = " ";
} else
{
$this_year = create_date('Y', time(), $board_config['board_timezone']);
$this_date = create_date('md', time(), $board_config['board_timezone']);
$poster_birthdate=realdate('md', $user_data[$i]['user_birthday']);
$poster_age = $this_year - realdate ('Y',$user_data[$i]['user_birthday']);
if ($this_date < $poster_birthdate) $poster_age--;
$poster_age = $poster_age;
$user_birthday = $poster_age.' Jahre';
}

if( $user_data[$i]['user_gender'] == 1) {
$usergender = "<img src='templates/subSilver/images/icon_minigender_male.gif' width='11' height='11' border='0'>";
}
if( $user_data[$i]['user_gender'] == 2) {
$usergender = "<img src='templates/subSilver/images/icon_minigender_female.gif' width='11' height='11' border='0'>";
}
if( $user_data[$i]['user_gender'] == 0) {
$usergender = " ";
}

                $top_posters_userlist_dieneuen .= (( ($top_posters_userlist_dieneuen) && ($user_data[$i]['user_id']) ) ? $seperator : '') .'<div class="Layer" id="dn_'.$i.'"><table width="110" border="0" cellspacing="1" cellpadding="5" bgcolor="#CC0000"><tr><td bgcolor="#EEEEEE"><img src="'.$user_photo.'" width="100" height="120" border="0"><br><br><span class="gensmall"><b>Alter:</b> '.$user_birthday.'<br><b>Geschlecht:</b> '.$usergender.'<br><b>Aus:</b> '.$user_data[$i]['user_from'].'</span></td></tr></table></div><b>» <a href="profile.'. $phpEx .'?mode=viewprofile&u='. $user_data[$i]['user_id'] .'" onMouseOver="showLAYER(\'dn_'.$i.'\')" onMouseOut="hideLAYER()" class="mainmenu">'. $user_data[$i]['username'] .'</a></b><br><span class="gensmall">Seit '.create_date($lang['DATE_FORMAT'], $user_data[$i]['user_regdate'], $board_config['board_timezone']).'</span>';
                $total_top_posters++;
        }
// Die Neuen

   // Random User
    function random_user()
    {
    global $db;

    $sql = "SELECT user_id, username, user_photo, user_from
                FROM " . USERS_TABLE . "
                    WHERE user_active = '1'
                    AND user_id <> " . ANONYMOUS . "
                ORDER BY RAND() LIMIT 1";
        if ( !($result = $db->sql_query($sql)) )
        {
          message_die(GENERAL_ERROR, 'Could not query random user data.', '', __LINE__, __FILE__, $sql);
        }
        return ( $row = $db->sql_fetchrow($result) ) ? $row : false;
    }
    $profiledata = random_user();

    $kuerzen = 9;
    $usernamerandom = substr_replace($profiledata['username'],"",$kuerzen);

    if (empty($profiledata['user_from'])){
    $aus = '';
    }else
    {
    $aus = '<br><span style="background-color:#EEEEEE;" class="gensmall">&nbsp;&nbsp;'.$profiledata['user_from'].'&nbsp;&nbsp;</span>';
    }
    if (empty($profiledata['user_photo'])){
    $random_link = '<table width="110" height="130" border="0" cellspacing="1" cellpadding="5" bgcolor="#000000"><tr><td background="images/photos/keinbild.jpg" align="right" valign="bottom"><span style="background-color:#EEEEEE;">&nbsp;&nbsp;<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=".$profiledata['user_id']."") . '"><b>'.$usernamerandom.'</b></a>&nbsp;&nbsp;</span>'.$aus.'</a></td></tr></table>';
    } else
    {
    $random_link = '<table width="110" height="130" border="0" cellspacing="1" cellpadding="5" bgcolor="#000000"><tr><td background="images/photos/'.$profiledata['user_photo'].'" align="right" valign="bottom"><span style="background-color:#EEEEEE;">&nbsp;&nbsp;<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=".$profiledata['user_id']."") . '"><b>'.$usernamerandom.'</b></a>&nbsp;&nbsp;</span>'.$aus.'</a></td></tr></table>';
    }
    // Random User Ende

    // Last Login
        $sql = "SELECT user_id, username, user_profile_views, user_photo, user_from, user_gender, user_birthday, user_session_time
            FROM " . USERS_TABLE . "
            WHERE user_active = '1'
            ORDER BY user_session_time DESC LIMIT 3";

        if( !($result = $db->sql_query($sql)) )
        {
        message_die(GENERAL_ERROR, 'Could not Query Top Posting Users', '', __LINE__, __FILE__, $sql);
        }

        $user_count = $db->sql_numrows($result);
        $user_data = $db->sql_fetchrowset($result);

        $firstcount = $user_data[0]['user_profile_views'];
        $total_top_posters = 0;
        $top_posters_userlist_lastlogins = '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>';
        $seperator = '';

        for ($i = 0; $i < $user_count; $i++)
        {

    if (empty($user_data[$i]['user_photo'])){
    $user_photo = 'images/photos/keinbild.jpg';
    } else
    {
    $user_photo = 'images/photos/'.$user_data[$i]['user_photo'];
    }

if ($user_data[$i]['user_birthday'] == '999999')
{
$user_birthday = "";
} else
{
$this_year = create_date('Y', time(), $board_config['board_timezone']);
$this_date = create_date('md', time(), $board_config['board_timezone']);
$poster_birthdate=realdate('md', $user_data[$i]['user_birthday']);
$poster_age = $this_year - realdate ('Y',$user_data[$i]['user_birthday']);
if ($this_date < $poster_birthdate) $poster_age--;
$poster_age = $poster_age;
$user_birthday = $poster_age.' Jahre';
}

                        if( $user_data[$i]['user_gender'] == 1) {
                        $usergender = "<img src='templates/subSilver/images/icon_minigender_male.gif' width='11' height='11' border='0'>";
                        }
                        if( $user_data[$i]['user_gender'] == 2) {
                        $usergender = "<img src='templates/subSilver/images/icon_minigender_female.gif' width='11' height='11' border='0'>";
                        }
                        if( $user_data[$i]['user_gender'] == 0) {
                        $usergender = "";
                        }

                $lastlogon = create_date($lang['DATE_FORMAT'], $user_data[$i]['user_session_time'], $board_config['board_timezone']);

                $top_posters_userlist_lastlogins .= (( ($top_posters_userlist_lastlogins) && ($user_data[$i]['user_id']) ) ? $seperator : '') .'<td><table width="100%" border="0" cellspacing="0" cellpadding="3"><tr><td width="10%" valign="top"><a href="profile.'. $phpEx .'?mode=viewprofile&u='. $user_data[$i]['user_id'] .'"><img src="'.$user_photo.'" width="55" height="65" border="1" class="Border"></a></td><td width="90%" valign="top"><span class="gensmall"><a href="profile.'. $phpEx .'?mode=viewprofile&u='. $user_data[$i]['user_id'] .'"><b>'.$user_data[$i]['username'].'</b></a><br><b>Alter:</b> '.$user_birthday.'<br><b>Geschlecht:</b> '.$usergender.'<br><b>Aus:</b> '.$user_data[$i]['user_from'].'<br><b>Login:</b> '.$lastlogon.'</span></td></tr></table></td>';
                $total_top_posters++;
        }

$top_posters_userlist_lastlogins .= '</tr></table>';
// Last Logins
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Ich gebe zu mir ist dein Skript zu lang um es zu prüfen, um das Thema übersichtlich zu halten solltest du es lieber als Textdatei verlinken statt es zu posten. Allerdings kann ich schon mal auf die anderen Fragen eingehen.

1. Es gibt eine "globale" Datei die immer (mit Ausnahme von kritischen Fehlern :) ) ausgeführt wird, genau genommen sogar ziemlich viele, allerdings sollte das Skript - da es eine Ausgabe machen soll - vermutlich am besten in den page_header.php im includes Ordner. Diese gibt den Seitenkopf aus, hierin kannst du die Variable mit Inhalt belegen lassen.
2. Das Skript in jede Datei einzubinden wäre auf keinen Fall eine gute Idee.
3. Du solltest ein solches Skript IMMER erst lokal testen bevor du es auf deinen Server loslässt. Da kannst du dann auch testen, bis wo es kommt bevor es in der Endlosschleife endet. (z.B. indem du in regelmäßigen Abständen echo "1"; echo "2"; ... Befehle einfügst (irgendwo zwischen der letzten Ausgabe und der nächsten liegt der Fehler)).
4. Eigentlich sollte es auch bei deinem Server eine Maximale Ausführungszeit geben (eben um solche Abstürze zu vermeiden).
5. Ich kann - wenn ich lokal teste - im Notfall den Apache abschießen wenn er nicht mehr reagiert, das Betriebssystem geht dadurch nicht vollständig in die Knie.

Bitte mache einen solchen lokalen Skripttest (muss auch nicht vollständig eingebaut werden, nur in eine "Rumpfdatei" für phpbb so dass es an die Daten kommt, die Ausgabe ist erst mal nicht wichtig) um herauszufinden wo der Fehler ist.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17473
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Hm, vielleicht liegt es am ORDER BY RAND()

Code: Alles auswählen

	$sql = "SELECT user_id, username, user_photo, user_from 
				FROM " . USERS_TABLE . " 
					WHERE user_active = '1' 
					AND user_id <> " . ANONYMOUS . " 
				ORDER BY RAND() LIMIT 1"; 
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Das dachte ich auch erst... aber es funktioniert.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Antworten

Zurück zu „Coding & Technik“