last active topics außerhalb des phpbb

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
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
combuster
Mitglied
Beiträge: 88
Registriert: 31.12.2007 01:47

last active topics außerhalb des phpbb

Beitrag von combuster »

Hi!

//Edit siehe dritte Post von mir


Alle fürs phpBB 3.0 verfügbaren last/recent-posts/topics scripte haben mir bis jetzt noch nicht so wirklich gefallen, weshalb ich grade selbst was schreibe.

Ich weiß allerdings nicht, wie ich diese Abfrage ändern muss, damit ich nur Beiträge bekomme, die Gäste sehen können, also z.B. nicht die Beiträge aus dem Bereich für die Moderatoren usw:

Code: Alles auswählen

$query="SELECT *
        FROM $table_prefix"."topics
        WHERE topic_approved = '1'
        ORDER BY topic_last_post_time DESC
        LIMIT 0,$limit";
Im 2.0.22 konnte man es so machen (f = phpbb_forums-Tabelle): WHERE ... f.auth_view = 0 ... Aber das gibts ja nun nicht mehr und ich denke, dass man es halt über das Rechte-System des 3.0.0 machen muss, allerdings, habe ich keine Ahnung wie ich die effektiven Rechte des Gast-Users bekomme :-?

Ihr könnt mir da doch bestimmt helfen, oder?
Poste hier anschließend natürlich meine gesamt Lösung!
(//Edit: siehe 3te Post von mir)

Danke
comb
Zuletzt geändert von combuster am 06.01.2008 13:46, insgesamt 2-mal geändert.
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Beitrag von nickvergessen »

Du kannst dir meinen angucken,
http://www.phpbb.de/viewtopic.php?t=152972
Da werden nur Posts angezeigt, wenn man sie lesen darf.
Für Gäste nur welche wo Gäste lesen dürfen, für Moderatoren auch die aus der Moderatorenecke.
kein Support per PN
combuster
Mitglied
Beiträge: 88
Registriert: 31.12.2007 01:47

Beitrag von combuster »

Hi & Danke!

Da ich das Script nicht innerhalb des phphBBs benötige, kann ich es leider nicht wirklich verwenden und es kann viel zu viel im Vergleich zu dem was ich brauche.

Dennoch habe ich mal in den Code geschaut und wenn ich es richtig sehe, ist dieser Part dafür zuständig, die entsprechenden Foren auszuwählen:

Code: Alles auswählen

	$forum_ary = array();
	$forum_read_ary = $auth->acl_getf('f_read');
	foreach ($forum_read_ary as $forum_id => $allowed)
	{
		if ($allowed['f_read'])
		{
			$forum_ary[] = (int) $forum_id;
		}
	}
	$forum_ary = array_unique($forum_ary);
	$forum_sql = (sizeof($forum_ary)) ? $db->sql_in_set('t.forum_id', $forum_ary, false) : $db->sql_in_set('t.forum_id', '0', false);
Das heißt, dass ich mindestens diese Klassen des phpBBs brauche:
  • auth
  • session / user
  • sql_db
Allerdings habe ich jetzt keine Ahnung, wie ich den Anonymen Gast User initialisiere. Kann mir da jemand helfen?

Code: Alles auswählen

$user = new user();
$auth = new auth();
$db = new $sql_db();
Was muss ich noch tun, um mit den Rechten des Gast-Users die folgenden Funktionen nutzen zu können?
  • auth->acl_getf('f_read');
  • $db->sql_in_set('t.forum_id', $forum_ary, false) /*bzw */ $db->sql_in_set('t.forum_id', '0', false);
Blick da irgendwie noch nicht so ganz durch..sorry

Danke!
comb
combuster
Mitglied
Beiträge: 88
Registriert: 31.12.2007 01:47

Script

Beitrag von combuster »

Hm nachdem ich darüber nicht einschlafen konnte, habe ich mich nochmal rangesetzt und das ist dabei raus gekommen:

Das Script kann irgendwo auf den Server gelegt werden.
Z.b. als lastposts.php - man muss lediglich den $phpbb_root_path anpassen.

Es werden die für den User speziell sichtbaren Themen/Posts gezeigt (Für den fall, dass er nicht eingeloggt ist, wird er natürlich nur wie ein Gast behandelt).

Verbesserungsvorschläge: gerne :)
Beispielaufruf ist unten drunter.

Code: Alles auswählen

<?
/**
 * phpBB3 - last active topics
 *
 * @author: combuster
 * @since: 06.01.2008
 */

//***************** BEGIN LAST ACTIVE TOPICS *****************//
function get_last_topics($limit = 10, $path = './')
{
    global $phpbb_root_path, $phpEx, $user, $auth, $cache, $db, $config;

    $phpbb_root_path = $path;;

    define('IN_PHPBB', 1);

    $phpEx = substr(strrchr(__FILE__, '.'), 1);

    // Include files
    require($phpbb_root_path . 'config.' . $phpEx);

    require($phpbb_root_path . 'includes/acm/acm_'. $acm_type . '.' . $phpEx);
    require($phpbb_root_path . 'includes/cache.' . $phpEx);
    require($phpbb_root_path . 'includes/session.' . $phpEx);
    require($phpbb_root_path . 'includes/auth.' . $phpEx);

    require($phpbb_root_path . 'includes/functions.' . $phpEx);

    require($phpbb_root_path . 'includes/constants.' . $phpEx);
    require($phpbb_root_path . 'includes/db/' . $dbms . '.' . $phpEx);
    require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx);

    // Instantiate some basic classes
    $user		= new user();
    $auth		= new auth();
    $cache		= new cache();
    $db			= new $sql_db();

    // Connect to DB
    $db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, defined('PHPBB_DB_NEW_LINK') ? PHPBB_DB_NEW_LINK : false);

    // We do not need this any longer, unset for safety purposes
    unset($dbpasswd);

    // Grab global variables, re-cache if necessary
    $config = $cache->obtain_config();

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

    // Get forums
    $forum_ary = array();
    $forum_read_ary = $auth->acl_getf('f_read');
    foreach ($forum_read_ary as $forum_id => $allowed)
    {
        if ($allowed['f_read'])
        {
            $forum_ary[] = (int) $forum_id;
        }
    }
    // Remove double entries
    $forum_ary = array_unique($forum_ary);
    // Get sql-source for where-clause
    $forum_sql = (sizeof($forum_ary)) ? $db->sql_in_set('t.forum_id', $forum_ary, false) : $db->sql_in_set('t.forum_id', '0', false);

    // Select last active topics
    $sql = "SELECT *
            FROM " . TOPICS_TABLE . " as t
            WHERE topic_approved = '1'
                AND $forum_sql
            ORDER BY topic_last_post_time DESC
            LIMIT 0, $limit";
    $result = $db->sql_query($sql);

    // Generate string with last active topics
    $str = "";
    while ($row = $db->sql_fetchrow($result)) {
        extract($row);
        $str .= '<a href="'.$phpbb_root_path."/viewtopic.php?f=$forum_id&t=$topic_id".'" target="_blank">'.utf8_decode($topic_title)."</a><br/><b>views</b>: $topic_views, <b>replies</b>: $topic_replies, <b>first poster</b>: ".utf8_decode($topic_first_poster_name).', <b>last poster</b>: '.utf8_decode($topic_last_poster_name).'<br/>';
    }

    $db->sql_freeresult($result);

    // Return last active topics
    return $str;
}

//***************** END LAST ACTIVE TOPICS *****************//

// Example:

// Display the last 5 active topics from the phpBB3 located at "forum/phpBB3/"
echo get_last_topics(5, "forum/phpBB3/");

?>
Man muss ein bischen aufpassen wo man die Funktion benutzt, da die globalen Variablen überschrieben werden. Allerdings muss man sie global machen, damit die phpBB Scripte drauf zugreifen können. Wäre kewl, wenn da jemand ne bessere Lösung hätte!

comb
Yoshi78
Mitglied
Beiträge: 2
Registriert: 20.01.2008 13:39

Beitrag von Yoshi78 »

gibts auch ne möglichkeit .. das die verlinkung direkt zum letzten post springt ... weil es ja zur zeit immer nur auf den anfang verweist ... ???
combuster
Mitglied
Beiträge: 88
Registriert: 31.12.2007 01:47

Re: Script

Beitrag von combuster »

Jo:

Code: Alles auswählen

$str .= '<a href="'.$phpbb_root_path."/viewtopic.php?f=$forum_id&t=$topic_id".'" target="_blank">'
wird zu

Code: Alles auswählen

$str .= '<a href="'.$phpbb_root_path."/viewtopic.php?f=$forum_id&p=$topic_last_post_id#p$topic_last_post_id".'" target="_blank">'
Antworten

Zurück zu „[3.0.x] Mods in Entwicklung“