Viktor's Supportboard (https://www.v-gn.de/wbb/index.php)
- Support für das wBB1.1, wBB1.2 und wBB Lite (https://www.v-gn.de/wbb/board.php?boardid=99)
-- Fragen/Hilfe/Sonstiges (wBB Lite 1.0) (https://www.v-gn.de/wbb/board.php?boardid=57)
--- Unterforen/Subforum als gelesen markieren (https://www.v-gn.de/wbb/thread.php?threadid=16416)
Geschrieben von sadagares am 11.11.2018 um 12:29:
Unterforen/Subforum als gelesen markieren
Moin, moin.
Bereits bin ich länger auf der Suche nach folgendem Hack. Ich weiß, dass es ihn damals bei mybb gab und folgendes Thema hier im Forum (https://www.v-gn.de/wbb/thread.php?threadid=5954) hat es mir auch bestätigt. Hier wird leider auch nur auf mybb verwiesen.
Ich hab bereits vor Monaten selbst versucht es irgendwie umzusetzen, bin aber gescheitert. Hat jemand zufällig eine Idee, ob es den Hack irgendwo anders gibt?
beste Grüße
Geschrieben von sadagares am 05.03.2019 um 18:34:
Hello (:
ich habe mich jetzt mal versucht daran zu machen, und komme nicht weiter.
meine markread.php sieht jetzt so aus:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
|
<?php
$filename="markread.php";
require ("./global.php");
if (isset($boardid)) {
if ($wbbuserdata['userid'] && $board['lastposttime'] > $wbbuserdata['lastvisit']) {
$db->unbuffered_query("REPLACE INTO bb".$n."_boardvisit (boardid,userid,lastvisit) VALUES ('".$boardid."','".$wbbuserdata['userid']."','".time()."')");
}
header("Location: board.php?boardid=$boardid&sid=$session[hash]");
}
else {
if ($wbbuserdata['userid']) {
$db->query("UPDATE bb".$n."_users SET lastvisit='".time()."' WHERE userid = '$wbbuserdata[userid]'");
}
else bbcookie("lastvisit", time(), 0);
header("Location: index.php?sid=$session[hash]");
}
?> |
|
klicke ich in einem Unterforum jetzt auf "Unterforum als gelesen markieren" fügt er in die _boardvisit in der Datenbank auch alles wunderbar ein.
Nun werden die Themen in dem Unterforum aber immer noch ungelesen angezeigt.
Ich habe (vorerst) in der board.php folgendes erweitert
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
|
$result = $db->query("
SELECT
b.*".ifelse($showlastposttitle==1,", t.topic, i.*")."
FROM bb".$n."_boards b
".ifelse($showlastposttitle==1,"LEFT JOIN bb".$n."_threads t ON (t.threadid=b.lastthreadid)
LEFT JOIN bb".$n."_icons i USING (iconid)")."
ORDER by b.parentid ASC, $boardorder");
while ($row = $db->fetch_array($result)) {
$boardcache[$row['parentid']][$row['boardorder']][$row['boardid']] = $row;
$boardnavcache[$row['boardid']]=$row;
} |
|
zu
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
|
$boardvisit = array();
$result = $db->query("
SELECT
b.*".ifelse($showlastposttitle==1,", t.topic, i.*, t.prefix AS threadprefix")."
FROM bb".$n."_boards b
LEFT JOIN bb".$n."_boardvisit bv ON (bv.boardid=b.boardid AND bv.userid='".$wbbuserdata['userid']."')
".ifelse($showlastposttitle==1,"LEFT JOIN bb".$n."_threads t ON (t.threadid=b.lastthreadid)
LEFT JOIN bb".$n."_icons i USING (iconid)")."
ORDER by b.parentid ASC, $boardorder");
while ($row = $db->fetch_array($result)) {
$boardcache[$row['parentid']][$row['boardorder']][$row['boardid']] = $row;
$boardnavcache[$row['boardid']]=$row;
$boardvisit[$row['boardid']] = $row['lastvisit'];
} |
|
Ich habe mich hier am wbb 2.3.6 orieniert, dass ich noch auf der Festplatte gefunden habe. Aber dann verließen sie mich. Trotz Abgleich des Codes kriege ich es nicht hin, dass er die Buttons korrekt anzeigt. Es wird weiterhin alles als neu markiert.
Im Lite ist dieser Part ja vorhanden:
code: |
1:
|
if(isset($boardvisit[$boardid]) && $boardvisit[$boardid]>$wbbuserdata['lastvisit']) $wbbuserdata['lastvisit']=$boardvisit[$boardid]; |
|
sodass ich davon ausgehe, dass ich hier eigentlich nichts mehr machen muss:
code: |
1:
2:
3:
4:
5:
6:
|
if($threads['important']==2) $foldericon="announce";
else $foldericon=ifelse($wbbuserdata['lastvisit']<$threads['lastposttime'] && $threadvisit[$threads['threadid']]<$threads['lastposttime'],"new").ifelse($threads['replycount']>=$board['hotthread_reply'] || $threads['views']>=$board['hotthread_view'],"hot").ifelse($threads['closed']!=0,"lock")."folder";
if($wbbuserdata['lastvisit']<$threads['lastposttime'] && $threadvisit[$threads['threadid']]<$threads['lastposttime']) eval ("\$firstnew = \"".$tpl->get("board_threadbit_firstnew")."\";");
if($threads['pollid']!=0) $threadicon=makeimgtag("{imagefolder}/poll.gif","");
elseif($threads['iconid']) $threadicon=makeimgtag($threads['iconpath'],$threads['icontitle']);
else $threadicon=" "; |
|
Irgendwo muss aber was fehlen. Hat jemand eine Idee?
beste Grüße
Geschrieben von Viktor am 05.03.2019 um 22:10:
Hallo,
oh da hast du ja was gemacht.
Die Tabelle "_boardvisit" gibt es je gar nicht im wBBLite also hast du da schon was erweitert.
Deine neue SQL-Abfrage sieht für mich jetzt auf der Schnelle gut aus.
Bitte beachte das die Grafik für gelesen oder ungelesen in der Datei "acp/lib/functions.php" gesetzt wird.
Der Code ist dafür zuständig.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
|
if($wbbuserdata['lastvisit'] > $boards['lastposttime'] || $boardvisit[$boards['boardid']] > $boards['lastposttime']) $onoff="off";
else {
$onoff="off";
$tempids = explode(",","$boards[boardid],$boards[childlist]");
for($j=0;$j<count($tempids);$j++) {
if($tempids[$j]==0) continue;
if(is_array($visitcache[$tempids[$j]]) && count($visitcache[$tempids[$j]])) {
reset($visitcache[$tempids[$j]]);
while(list($threadid,$lastposttime)=each($visitcache[$tempids[$j]])) {
if($threadvisit[$threadid]<$lastposttime && $boardvisit[$tempids[$j]]<$lastposttime) {
$onoff="on";
break 2;
} // end if
} // end while
} // end if
} // end for
} // end else
|
|
Da müsstet du noch mal schauen wie es im wBB2.3 ist.
Die Zeile sieht im wBB2.3 auch anders aus.
code: |
1:
2:
3:
|
if(isset($boardvisit[$boardid]) && $boardvisit[$boardid]>$wbbuserdata['lastvisit']) $wbbuserdata['lastvisit']=$boardvisit[$boardid];
|
|
Bitte auch beachten das im wBBLite die Variable "$boardvisit" aus dem Cookie gefüllt wird und im wBB2.3 aus der Tabelle "_boardvisit".
Gruß
Viktor
Geschrieben von sadagares am 05.03.2019 um 22:19:
Hallo Viktor und danke für deine Rückmeldung,
das mit dem Cookie ist mir aufgefallen. Den Code für den cookie habe ich entfernt und dafür diesen Teil erweitert:
code: |
1:
2:
3:
|
$boardvisit = array();
... fortlaufend
|
|
Ahh, der Part in der functions.php ist aber jedoch für die boardbits, oder? Soweit war ich noch nicht, beziehungsweise wollte ich Schritt für Schritt machen und erstmal, dass er die Themen als gelesen anzeigt. Weil die laufen ja parallel nebenbeinander, wenn ich das richtig sehe.
Diese Zeile finde ich im 2.3.6 gar nicht, weswegen ich sie erstmal stehen gelassen habe.
code: |
1:
|
if(isset($boardvisit[$boardid]) && $boardvisit[$boardid]>$wbbuserdata['lastvisit']) $wbbuserdata['lastvisit']=$boardvisit[$boardid]; |
|
Im 2.3.6 sieht der Code für die Icons in der board_threadbit ja so aus:
code: |
1:
2:
3:
4:
5:
|
if ($threads['important'] == 2) $foldericon = 'announce';
else $foldericon = ((isset($threads['userid']) && $threads['userid']) ? ('dot') : ('')).(($threads['lastposttime'] > $board['lastvisit'] && $threads['lastposttime'] > $threads['lastvisit']) ? ('new') : ('')).(($threads['replycount'] >= $board['hotthread_reply'] || $threads['views'] >= $board['hotthread_view']) ? ('hot') : ('')).(($threads['closed'] != 0) ? ('lock') : ('')).'folder';
if ($threads['pollid'] != 0) $threadicon = makeimgtag($style['imagefolder'].'/poll.gif');
elseif ($threads['iconid']) $threadicon = makeimgtag($threads['iconpath'], getlangvar($threads['icontitle'], $lang), 0);
else $threadicon = ' '; |
|
und da verwirrt mich der Aufbau leider extrem.
Geschrieben von Viktor am 05.03.2019 um 22:35:
|
Zitat: Original von sadagares
Hallo Viktor und danke für deine Rückmeldung,
Ahh, der Part in der functions.php ist aber jedoch für die boardbits, oder? Soweit war ich noch nicht, beziehungsweise wollte ich Schritt für Schritt machen und erstmal, dass er die Themen als gelesen anzeigt. Weil die laufen ja parallel nebenbeinander, wenn ich das richtig sehe.
|
|
|
Hallo,
da wird die Grafik "on" oder "off" gesetzt.
Das musst du Dir noch mal genauer ansehen.
code: |
1:
2:
3:
4:
5:
|
Diese Zeile finde ich im 2.3.6 gar nicht, weswegen ich sie erstmal stehen gelassen habe.
if(isset($boardvisit[$boardid]) && $boardvisit[$boardid]>$wbbuserdata['lastvisit']) $wbbuserdata['lastvisit']=$boardvisit[$boardid];
|
|
Das müsste der Code im wBB2.3 sein.
code: |
1:
2:
3:
|
if ($wbbuserdata['lastvisit'] > $board['lastvisit']) $board['lastvisit'] = $wbbuserdata['lastvisit'];
|
|
Gruß
Viktor
Geschrieben von sadagares am 05.03.2019 um 22:45:
Ja genau, aber ich bin aktuell bei
1) firstnew
2) new/old folder
die on/off wollte ich danach machen, wenn ich durch den Code gestiegen bin.
Ah, jetzt habe ich ihn gefunden. Leider bleibt es dabei. Aber ich habe mal einen Screenshot mit was ich aktuell genau meine.
Geschrieben von sadagares am 06.03.2019 um 11:55:
Ahh. Ich habs hinbekommen. Es fehlte in der global.php der Zusatz für die boardvisit in der $board select Abfrage. Man möchte ein wenig facepalmen, dass es doch so einfach war.
Jetzt machen wir den Rest.
Vielen Dank aber auf jeden Fall.
Geschrieben von Viktor am 06.03.2019 um 20:35:
|
Zitat: Original von sadagares
Ahh. Ich habs hinbekommen. Es fehlte in der global.php der Zusatz für die boardvisit in der $board select Abfrage. Man möchte ein wenig facepalmen, dass es doch so einfach war.
Jetzt machen wir den Rest.
Vielen Dank aber auf jeden Fall. |
|
|
Hallo,
schön das es klappt.
Gruß
Viktor
Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab® GmbH