MyBB.de Forum

Normale Version: Portal: Abfragen ob Thread von User gelesen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Tag,
Ich habe auf folgender Seite das Portal als Startseite eingerichtet:
http://clubfreeware.bplaced.net/

Nun möchte ich gerne den Threads, die vom User noch nicht gelesen sind einen andersfarbigen Rahmen geben. Jedoch blick ich im PHP Code noch nicht ganz durch. Wenn ich mich nicht irre ist in der forumdisplay.php dies verantwortlich dafür:
PHP-Code:
if($mybb->user['uid'] == 0)
{
    
// Build a forum cache.
    
$query $db->query("
        SELECT *
        FROM "
.TABLE_PREFIX."forums
        WHERE active != 0
        ORDER BY pid, disporder
    "
);
    
    
$forumsread unserialize($mybb->cookies['mybb']['forumread']);
}
else
{
    
// Build a forum cache.
    
$query $db->query("
        SELECT f.*, fr.dateline AS lastread
        FROM "
.TABLE_PREFIX."forums f
        LEFT JOIN "
.TABLE_PREFIX."forumsread fr ON (fr.fid=f.fid AND fr.uid='{$mybb->user['uid']}')
        WHERE f.active != 0
        ORDER BY pid, disporder
    "
);
}
while(
$forum $db->fetch_array($query))
{
    if(
$mybb->user['uid'] == 0)
    {
        if(
$forumsread[$forum['fid']])
        {
            
$forum['lastread'] = $forumsread[$forum['fid']];
        }
    }
    
$fcache[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum;


In der portal.php ist dieser Abschnitt für die Threads zuständig:
PHP-Code:
// Latest forum discussions
if($mybb->settings['portal_showdiscussions'] != && $mybb->settings['portal_showdiscussionsnum'])
{
    
$altbg alt_trow();
    
$threadlist '';
    
$query $db->query("
        SELECT t.*, u.username
        FROM "
.TABLE_PREFIX."threads t
        LEFT JOIN "
.TABLE_PREFIX."users u ON (u.uid=t.uid)
        WHERE 1=1 
$unviewwhere AND t.visible='1' AND t.closed NOT LIKE 'moved|%'
        ORDER BY t.lastpost DESC 
        LIMIT 0, "
.$mybb->settings['portal_showdiscussionsnum']
    );
    while(
$thread $db->fetch_array($query))
    {
        
$lastpostdate my_date($mybb->settings['dateformat'], $thread['lastpost']);
        
$lastposttime my_date($mybb->settings['timeformat'], $thread['lastpost']);
        
// Don't link to guest's profiles (they have no profile).
        
if($thread['lastposteruid'] == 0)
        {
            
$lastposterlink $thread['lastposter'];
        }
        else
        {
            
$lastposterlink build_profile_link($thread['lastposter'], $thread['lastposteruid']);
        }
        if(
my_strlen($thread['subject']) > 20)
        {
            
$thread['subject'] = my_substr($thread['subject'], 020) . "...";
        }
        
$thread['subject'] = htmlspecialchars_uni($parser->parse_badwords($thread['subject']));
        
$thread['threadlink'] = get_thread_link($thread['tid']);
        eval(
"\$threadlist .= \"".$templates->get("portal_latestthreads_thread")."\";");
        
$altbg alt_trow();
    }
    if(
$threadlist)
    { 
        
// Show the table only if there are threads
        
eval("\$latestthreads = \"".$templates->get("portal_latestthreads")."\";");
    }


Wie stell ich das jetzt an, dass ich von gelesen und ungelesen unterscheiden kann?
Ich sagte ja, dass das komplizierter ist. Ich glaube nicht, dass dir jemand den fertigen Code bastelt. Wink
Ich könnte auch was per w2b (work2buy.com) zahlen wenns sein muss. Einfach per PN melden. (Wenn jemand mit Geld gleich interesse daran hat, könnte er gleich noch mehr machen)

Aber ich wäre schon über Unterstützung froh. Also so wie ich das sehe wird da was per Cookie gespeichert. und erst dann in der Schleife wieder abgefragt. Würdet ihr das so belassen oder wie ist das?
Abgesehen davon ist der Code ja sowieso zu nichts Nütz. Im Forum werden bei uns einfach alle als ungelesen markiert...
Nein, nur für Gäste wird in Cookies gespeichert. Bei Benutzern steht das in der Datenbank.