Letzten Topics im Forum anzeigen

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
FlaverSaver
Mitglied
Beiträge: 3
Registriert: 20.12.2010 09:03

Letzten Topics im Forum anzeigen

Beitrag 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
FlaverSaver
Mitglied
Beiträge: 3
Registriert: 20.12.2010 09:03

Re: Letzten Topics im Forum anzeigen

Beitrag 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
Benutzeravatar
Unimatrix_0
Mitglied
Beiträge: 392
Registriert: 03.11.2007 10:50
Kontaktdaten:

Re: Letzten Topics im Forum anzeigen

Beitrag 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)
FlaverSaver
Mitglied
Beiträge: 3
Registriert: 20.12.2010 09:03

Re: Letzten Topics im Forum anzeigen

Beitrag 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
Benutzeravatar
Frank1604
Ehemaliges Teammitglied
Beiträge: 2106
Registriert: 07.11.2007 09:25
Wohnort: Einhausen
Kontaktdaten:

Re: Letzten Topics im Forum anzeigen

Beitrag 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); 
Gruß, Frank
Meine Meinung steht fest. Bitte verwirrt mich nicht mit Tatsachen!
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“