Seite 1 von 1

Letzten Topics im Forum anzeigen

Verfasst: 20.12.2010 09:36
von FlaverSaver
Hallo liebes Forum,

ich weiß, dieses Thema gab es schon sehr oft hier im Forum, aber nicht ganz so wie ich mir das so dachte.

Ich habe bereits eine menge (3 Stunden) auf Deutsch und Englisch gegooglet, aber leider noch nichts gefunden. Ich möchte nämlich die letzten eröffneten Topics aus dem Forum auf meiner Homepage anzeigen. Das wäre ja alles kein Problem, aber es werden ja auch Topics aus internen Bereichen angezeigt, der User kann sie zwar nicht lesen aber trotzdem.

Ich könnte zwar alle erlaubten Foren-IDs auflisten und dann das Query so absenden, aber wenn ich ein neues Forum aufmache, muss ich dort erst die ID eintragen.

Ich habe schon einige Zeit in die Datenbanktabellen von phpBB geschaut, finde aber nicht die Verknüfungen zwischen der Tabelle topics, foums, acl_roles, und groups. Die Verbindung zwischen topics und forums ist ja nicht zu übersehen, aber ich finde nicht herraus, welche Foren der User anonymous lesen darf. Wenn ich das wüsste müsste ich nur noch ein Query schreiben.

mfg
Philip

Re: Letzten Topics im Forum anzeigen

Verfasst: 20.12.2010 16:18
von Dr.Death

Re: Letzten Topics im Forum anzeigen

Verfasst: 23.12.2010 12:22
von FlaverSaver
Hallo,

ich war leider gestern abwesend, deswegen melde ich mich erst heute.

Auf den ersten Blick sieht das Beispiel super aus, abr auf den zweiten Blick erkennt man, wie in Kommentar 1 beschrieben, das durch diesen "Mod" auch Topics aus Foren angezeigt werden, auf die der User keine Rechte hat.

Ich habe ein eigenes Adminforum, worauf natürlich nichteingeloggte User (ANONYMOUS) keinen Zugriff drauf haben. Durch den "Mod" werden Topics dann aber trotzdem aus dem Forum angezeit, und das ist das Problem an dem "Mod".

Vielleich weiß jemand ncoh Rat, sonst muss ich das wohl so machen das ich die Foren-IDs aufliste, aus denen Topcis angezeigt werden dürfen.

Gruß
Philip

Re: Letzten Topics im Forum anzeigen

Verfasst: 23.12.2010 12:33
von Unimatrix_0
versuchs mit http://blog.phpbb.com/2009/11/09/how-to ... nal-pages/

da gibt es den Punkt: The latest topics (including only from specified forums)

Re: Letzten Topics im Forum anzeigen

Verfasst: 23.12.2010 13:44
von FlaverSaver
Super Danke,

habe daraus nun ein für mich funktionierendes Script gebastelt:

Code: Alles auswählen

<?php
/*
* home.php
* Description: example file for displaying latest posts and topics
* by battye (for phpBB.com MOD Team)
* modded by http://FlaverSaver.de    23.12.2010
* September 29, 2009
*/

define('IN_PHPBB', true);
$phpbb_root_path = 'forum/'; //relative Pfadangabe zum Forenverzeichis, muss mit / enden.
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
$anzahl = 5; //Die Anzahl der letzen Topics, die angezeigt werden sollen.

// Start session management
$user->session_begin();
$auth->acl($user->data);

/* create_where_clauses( int[] gen_id, String type ) 

* This function outputs an SQL WHERE statement for use when grabbing  

* posts and topics */ 

function create_where_clauses($gen_id, $type) 

{ 

global $db, $auth; 

    $size_gen_id = sizeof($gen_id); 

        switch($type) 

        { 

            case 'forum': 

                $type = 'forum_id'; 

                break; 

            case 'topic': 

                $type = 'topic_id'; 

                break; 

            default: 

                trigger_error('No type defined'); 

        } 

    // Set $out_where to nothing, this will be used of the gen_id 

    // size is empty, in other words "grab from anywhere" with 

    // no restrictions 

    $out_where = ''; 

    if( $size_gen_id > 0 ) 

    { 

    // Get a list of all forums the user has permissions to read 

    $auth_f_read = array_keys($auth->acl_getf('f_read', true)); 

        if( $type == 'topic_id' ) 

        { 

            $sql     = 'SELECT topic_id FROM ' . TOPICS_TABLE . ' 

                        WHERE ' .  $db->sql_in_set('topic_id', $gen_id) . ' 

                        AND ' .  $db->sql_in_set('forum_id', $auth_f_read); 

            $result  = $db->sql_query($sql); 

                while( $row = $db->sql_fetchrow($result) ) 

                { 

                        // Create an array with all acceptable topic ids 

                        $topic_id_list[] = $row['topic_id']; 

                } 

            unset($gen_id); 

            $gen_id = $topic_id_list; 

            $size_gen_id = sizeof($gen_id); 

        } 

    $j = 0;  

        for( $i = 0; $i < $size_gen_id; $i++ ) 

        { 

        $id_check = (int) $gen_id[$i]; 

            // If the type is topic, all checks have been made and the query can start to be built 

            if( $type == 'topic_id' ) 

            { 

                $out_where .= ($j == 0) ? 'WHERE ' . $type . ' = ' . $id_check . ' ' : 'OR ' . $type . ' = ' . $id_check . ' '; 

            } 

            // If the type is forum, do the check to make sure the user has read permissions 

            else if( $type == 'forum_id' && $auth->acl_get('f_read', $id_check) ) 

            { 

                $out_where .= ($j == 0) ? 'WHERE ' . $type . ' = ' . $id_check . ' ' : 'OR ' . $type . ' = ' . $id_check . ' '; 

            }    

        $j++; 

        } 

    } 

    if( $out_where == '' && $size_gen_id > 0 ) 

    { 

        trigger_error('A list of topics/forums has not been created'); 

    } 

    return $out_where; 

} 


$sql = 'select topic_title, concat(topic_url, topic_id, ".html") as url from '.$table_prefix.'topics '.trim(create_where_clauses(array_keys($auth->acl_getf('f_read', true)), 'forum')).' order by topic_time desc limit '.$anzahl;
$result = mysql_query($sql);

while($row = mysql_fetch_object($result)) {
    echo '<a href="'.$phpbb_root_path.$row->url.'">'.$row->topic_title.'</a><br/>';
}
?>
Ich verwende dazu noch den phpBB Seo Mod (http://www.phpbb-seo.com/) deswege kommt es am Ende bei der Ausgabe zu Unterschieden.

Ich hoffe das hiermit noch so der ein oder andere User etwas mit anfangen kann.

Edit: Ich sehe gerade, es gibt ja gar keinen PHP BB-Code, schade ;)

Edit2: Nach einwenig rumprobiern/spielen merke ich, das man das ganze nicht per include laden kann. Man erhält immer folgende Fehlermeldung:

Code: Alles auswählen

Fatal error: Call to a member function sql_query() on a non-object in /*/forum/includes/cache.php on line 52
Er mag also, dass $result = $db->sql_query($sql); nicht, das mir gerade Kopfzerbrechen bereitet.

Gruß
Philip

Re: Letzten Topics im Forum anzeigen

Verfasst: 27.12.2010 11:26
von Frank1604
Setze mal ein

Code: Alles auswählen

$user->setup(); 
nach dem

Code: Alles auswählen

// Start session management
$user->session_begin();
$auth->acl($user->data);