rellek
retired
Dabei seit: 16.01.04
Beiträge: 720
|
|
Titel: Ähnliche Themen
Version: 1.0
Beschreibung: Name: Ähnliche Themen
Version: 1.0
Für wBB-Version: 2.3
Getestet mit: 2.3 Beta 3
Beschreibung: Mit diesem Hack werden zu jedem Thema 5 ähnliche Themen gesucht. Dazu wird
die MySQL-Bedingung LIKE verwendet, d.h. wenn die Anzeige "komisch" oder
unsauber funktioniert, dann ist MySQL schuld.
Dieser Hack ist im Gegensatz zu den meisten anderen Hacks, die ähnliches
leisten, sehr sparsam gecodet. Es für die Abfrage nur ein zusätzlicher SQL-
Query nötig, ein weiterer kommt hinzu, wenn der Permission-Cache nicht gesetzt
ist, um die Foren ausfindig zu machen, in denen gesucht wird.
Foren, zu denen man keine Berechtigung hat, werden, genauso wie passwortgeschützte
Foren, von der Suche nach ähnlichen Themen ausgeschlossen, sodass niemand etwas
sieht, was er nicht sehen darf.
Demo: http://board.rellek.org/attachment.php?attachmentid=538
Copyright: (c) 2005 by rellek
Disclaimer: Keine Haftung für irgendwelche Schäden am Board. Fehler sind natürlich nicht ausgeschlossen
---
Bekannte Fehler: -
Updates und Bugfixes: -
----
Demo: http://board.rellek.org/attachment.php?attachmentid=538
weiter zum Download
|
|
01.01.05 18:01 |
WWW
Finden
Als Freund hinzufügen
|
|
| |
|
Bräke
Mitglied
Dabei seit: 01.01.04
Beiträge: 8.189
|
|
Zitat: |
Original von rellek
Dazu wird die MySQL-Bedingung LIKE verwendet, d.h. wenn die Anzeige "komisch" oder unsauber funktioniert, dann ist MySQL schuld.
|
Wird wohl daran liegen.
|
|
13.07.09 23:56 |
Finden
Als Freund hinzufügen
|
|
rellek
retired
Dabei seit: 16.01.04
Beiträge: 720
Themenstarter
|
|
Wer am Beta-Test der neuen Version teilnehmen möchte, der ersetzt bitte den längeren Abschnitt zwischen den beiden
code: |
1:
|
/* Ähnliche Themen */ |
|
und
code: |
1:
|
/* Ähnliche Themen Ende */ |
|
mit:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
|
/* Ähnlich Themen */
function GetAccessableForums() {
global $db, $n, $wbbuserdata, $boardcache;
if (!isset($boardcache) || !is_array($boardcache)) $boardcache = array();
$result = $db->query("SELECT boardid,boardorder,parentid,parentlist FROM bb".$n."_boards ORDER BY parentid ASC, boardorder ASC");
while ($row = $db->fetch_array($result)) {
$boardcache[$row['parentid']][$row['boardorder']][$row['boardid']] = $row;
}
$boardpermissions = getPermissions();
$boardids = '';
foreach ($boardcache as $key => $val) {
foreach ($val as $key2 => $val2) {
foreach ($val2 as $row) if ((!isset($boardpermissions[$row['boardid']]['can_view_board']) || $boardpermissions[$row['boardid']]['can_view_board'] != 0) && (!isset($boardpermissions[$row['boardid']]['can_enter_board']) || $boardpermissions[$row['boardid']]['can_enter_board'] != 0) && (!isset($boardpermissions[$row['boardid']]['can_read_thread']) || $boardpermissions[$row['boardid']]['can_read_thread'] != 0)) $boardids .= ",".$row['boardid'];
}
}
return $boardids;
}
/* Unset Used Vars To Avoid Hacking Attempts */
unset($similar_thread_bit);
unset($like_string);
$ttopic = str_replace("."," ",$threadtopic);
$ttopic = str_replace("!"," ",$ttopic);
$ttopic = str_replace("?"," ",$ttopic);
$ttopic = str_replace("/"," ",$ttopic);
$ttopic = str_replace("§"," ",$ttopic);
$ttopic = str_replace("$"," ",$ttopic);
$ttopic = str_replace("%"," ",$ttopic);
$ttopic = str_replace("&"," ",$ttopic);
$ttopic = str_replace("("," ",$ttopic);
$ttopic = str_replace(")"," ",$ttopic);
$ttopic = str_replace("="," ",$ttopic);
$ttopic = str_replace("\\"," ",$ttopic);
$ttopic = str_replace("?"," ",$ttopic);
$ttopic = str_replace("-"," ",$ttopic);
$ttopic = str_replace("*"," ",$ttopic);
$ttopic = str_replace("+"," ",$ttopic);
$ttopic = str_replace("#"," ",$ttopic);
$ttopic = str_replace("_"," ",$ttopic);
$ttopic = str_replace(","," ",$ttopic);
$ttopic = str_replace(":"," ",$ttopic);
$ttopic = str_replace(";"," ",$ttopic);
$ttopic = str_replace("<"," ",$ttopic);
$ttopic = str_replace(">"," ",$ttopic);
$ttopic = str_replace("|"," ",$ttopic);
$ttopic = str_replace("~"," ",$ttopic);
$ttopic = str_replace("'"," ",$ttopic);
$ttopic = str_replace('"',' ',$ttopic);
$ttopic = explode(" ",$ttopic);
$badwordlist = explode("\n",$badsearchwords);
$y = count($ttopic);
if($y>1) {
foreach($ttopic as $tt) {
if(!in_array($tt, $badwordlist)) {
if(strlen($tt)>=$minwordlength && strlen($tt)<=$maxwordlength) $x++;
if($x>1 && (strlen($tt)>=$minwordlength && strlen($tt)<=$maxwordlength)) $like_string .= " OR t.topic LIKE ";
if(strlen($tt)>=$minwordlength && strlen($tt)<=$maxwordlength) $like_string .= "'%".$tt."%'";
}
}
} else $like_string = "'%$threadtopic%'";
if($like_string) {
$similar = $db->query("SELECT
t.threadid, t.boardid, x.title, x.boardid, t.prefix, t.topic, t.starttime, t.starterid, t.starter, t.lastposttime, t.lastposterid, t.lastposter, t.replycount, t.views, t.attachments, t.closed, t.important, t.pollid
FROM bb".$n."_threads t, bb".$n."_boards x
LEFT JOIN bb".$n."_boards b ON (t.boardid=b.boardid)
WHERE t.visible='1'
AND t.closed <> 3
AND t.threadid <> $threadid
AND b.password=''
AND t.boardid=x.boardid
AND t.boardid IN (0".GetAccessableForums().")
AND (t.topic LIKE ".$like_string.")
ORDER BY t.lastposttime DESC
LIMIT 0, 5;");
}
if($like_string && $db->num_rows($similar)) {
$i = "0";
while ($row = $db->fetch_array($similar)) {
$i++;
$tdclass = getone($i, "tablea", "tableb");
$started = formatdate($wbbuserdata['dateformat'], $row['starttime'],1);
$started .= " <span class=\"time\">".formatdate($wbbuserdata['timeformat'], $row['starttime'])."</span>";
$lastreply = formatdate($wbbuserdata['dateformat'], $row['lastposttime'],1);
$lastreply .= " <span class=\"time\">".formatdate($wbbuserdata['timeformat'], $row['lastposttime'])."</span>";
if ($row['replycount'] >= 1000) $row['replycount'] = number_format($row['replycount'], 0, "", $lang->get("LANG_GLOBAL_THOUSANDS_SEP"));
if ($row['views'] >= 1000) $row['views'] = number_format($row['views'], 0, "", $lang->get("LANG_GLOBAL_THOUSANDS_SEP"));
if (strlen($row['topic']) > 60) $row['topic'] = substr($row['topic'], 0, 54).' [...]';
$row['topic'] = htmlconverter($row['topic']);
eval("\$similar_thread_bit .= \"".$tpl->get("thread_similarthread_bit")."\";");
}
eval("\$similar_thread = \"".$tpl->get("thread_similarthread")."\";");
}
/* Ähnliche Themen Ende */ |
|
Auftretende Bugs bitte melden !
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von rellek: 17.02.05 14:03.
|
|
06.01.05 16:19 |
WWW
Finden
Als Freund hinzufügen
|
|
|
The White Wolf
Mitglied
Dabei seit: 17.01.04
Beiträge: 409
Herkunft: Bleckede Forenversion: 2.3
|
|
Zitat: |
Original von rellek
Wer am Beta-Test der neuen Version teilnehmen möchte, der ersetzt bitte den längeren Abschnitt zwischen den beiden
code: |
1:
|
/* Ähnliche Themen */ |
|
und
code: |
1:
|
/* Ähnliche Themen Ende */ |
|
mit:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
|
/* Ähnlich Themen */
function GetAccessableForums() {
global $db, $n, $wbbuserdata, $boardcache;
if (!isset($boardcache) || !is_array($boardcache)) $boardcache = array();
$result = $db->query("SELECT boardid,boardorder,parentid,parentlist FROM bb".$n."_boards ORDER BY parentid ASC, boardorder ASC");
while ($row = $db->fetch_array($result)) {
$boardcache[$row['parentid']][$row['boardorder']][$row['boardid']] = $row;
}
$boardpermissions = getPermissions();
$boardids = '';
foreach ($boardcache as $key => $val) {
foreach ($val as $key2 => $val2) {
foreach ($val2 as $row) if ((!isset($boardpermissions[$row['boardid']]['can_view_board']) || $boardpermissions[$row['boardid']]['can_view_board'] != 0) && (!isset($boardpermissions[$row['boardid']]['can_enter_board']) || $boardpermissions[$row['boardid']]['can_enter_board'] != 0) && (!isset($boardpermissions[$row['boardid']]['can_read_thread']) || $boardpermissions[$row['boardid']]['can_read_thread'] != 0)) $boardids .= ",".$row['boardid'];
}
}
return $boardids;
}
/* Unset Used Vars To Avoid Hacking Attempts */
unset($similar_thread_bit);
unset($like_string);
$ttopic = str_replace("."," ",$threadtopic);
$ttopic = str_replace("!"," ",$ttopic);
$ttopic = str_replace("?"," ",$ttopic);
$ttopic = str_replace("/"," ",$ttopic);
$ttopic = str_replace("§"," ",$ttopic);
$ttopic = str_replace("$"," ",$ttopic);
$ttopic = str_replace("%"," ",$ttopic);
$ttopic = str_replace("&"," ",$ttopic);
$ttopic = str_replace("("," ",$ttopic);
$ttopic = str_replace(")"," ",$ttopic);
$ttopic = str_replace("="," ",$ttopic);
$ttopic = str_replace("\\"," ",$ttopic);
$ttopic = str_replace("?"," ",$ttopic);
$ttopic = str_replace("-"," ",$ttopic);
$ttopic = str_replace("*"," ",$ttopic);
$ttopic = str_replace("+"," ",$ttopic);
$ttopic = str_replace("#"," ",$ttopic);
$ttopic = str_replace("_"," ",$ttopic);
$ttopic = str_replace(","," ",$ttopic);
$ttopic = str_replace(":"," ",$ttopic);
$ttopic = str_replace(";"," ",$ttopic);
$ttopic = str_replace("<"," ",$ttopic);
$ttopic = str_replace(">"," ",$ttopic);
$ttopic = str_replace("|"," ",$ttopic);
$ttopic = str_replace("~"," ",$ttopic);
$ttopic = str_replace("'"," ",$ttopic);
$ttopic = str_replace('"',' ',$ttopic);
$ttopic = explode(" ",$ttopic);
$badwordlist = explode("\n",$badsearchwords);
$y = count($ttopic);
if($y>1) {
foreach($ttopic as $tt) {
if(!in_array($tt, $badwordlist)) {
if(strlen($tt)>=$minwordlength && strlen($tt)<=$maxwordlength) $x++;
if($x>1 && (strlen($tt)>=$minwordlength && strlen($tt)<=$maxwordlength)) $like_string .= " OR t.topic LIKE ";
if(strlen($tt)>=$minwordlength && strlen($tt)<=$maxwordlength) $like_string .= "'%".$tt."%'";
}
}
} else $like_string = "'%$threadtopic%'";
if($like_string) {
$similar = $db->query("SELECT
t.threadid, t.boardid, x.title, x.boardid, t.prefix, t.topic, t.starttime, t.starterid, t.starter, t.lastposttime, t.lastposterid, t.lastposter, t.replycount, t.views, t.attachments, t.closed, t.important, t.pollid
FROM bb".$n."_threads t, bb".$n."_boards x
LEFT JOIN bb".$n."_boards b ON (t.boardid=b.boardid)
WHERE t.visible='1'
AND t.closed <> 3
AND t.threadid <> $threadid
AND b.password=''
AND t.boardid=x.boardid
AND t.boardid IN (0".GetAccessableForums().")
AND (t.topic LIKE ".$like_string.")
ORDER BY t.lastposttime DESC
LIMIT 0, 5;");
}
if($like_string && $db->num_rows($similar)) {
$i = "0";
while ($row = $db->fetch_array($similar)) {
$i++;
$tdclass = getone($i, "tablea", "tableb");
$started = formatdate($wbbuserdata['dateformat'], $row['starttime'],1);
$started .= " <span class=\"time\">".formatdate($wbbuserdata['timeformat'], $row['starttime'])."</span>";
$lastreply = formatdate($wbbuserdata['dateformat'], $row['lastposttime'],1);
$lastreply .= " <span class=\"time\">".formatdate($wbbuserdata['timeformat'], $row['lastposttime'])."</span>";
if ($row['replycount'] >= 1000) $row['replycount'] = number_format($row['replycount'], 0, "", $lang->get("LANG_GLOBAL_THOUSANDS_SEP"));
if ($row['views'] >= 1000) $row['views'] = number_format($row['views'], 0, "", $lang->get("LANG_GLOBAL_THOUSANDS_SEP"));
if (strlen($row['topic']) > 60) $row['topic'] = substr($row['topic'], 0, 54).' [...]';
$row['topic'] = htmlconverter($row['topic']);
eval("\$similar_thread_bit .= \"".$tpl->get("thread_similarthread_bit")."\";");
}
eval("\$similar_thread = \"".$tpl->get("thread_similarthread")."\";");
}
/* Ähnliche Themen Ende */ |
|
Auftretende Bugs bitte melden ! |
Wohl ne blöde Frage - aber in welcher Datei ?
|
|
20.06.05 20:56 |
E-Mail
WWW
Finden
Als Freund hinzufügen
|
|
|
dieb100
Mitglied
Dabei seit: 12.08.05
Beiträge: 12
Herkunft: NRW Forenversion: WBB 2.3.2 / JGS-XA Portal 3.1.0
|
|
1000 Dank für den Hack
funktioniert mit der beta-änderung echt gut bei mir
klasse arbeit
|
|
23.08.05 00:34 |
E-Mail
WWW
Finden
Als Freund hinzufügen
|
|
|
SnakeBlood
Mitglied
Dabei seit: 03.03.05
Beiträge: 433
|
|
Dann hast du wohl keine ähnlichen Themen, ich habe es mit 2 Themen getestet die ich "Testthema" genannt habe, ging beides perfekt
Danke für den Hack !
|
|
26.12.06 13:43 |
E-Mail
Finden
Als Freund hinzufügen
|
|
skooli
Mitglied
Dabei seit: 31.05.04
Beiträge: 46
|
|
ich hab wieder das gleiche Problem wie mit dem Hack in der Version 2.1.x
alle änderungen durchgeführt, templates gecached, aber es erscheint einfach nichts.
Diesemal funzt es auch nicht mit der Änderung vom Beta-Test, der hier im Support-Thread ist (wenn ich das einfüge, bleibt die thread.php immer weiß).
Woran kann das liegen? hinten dran ist meine thread.php, hilft vielleicht...
Dateianhang: |
thread.zip (8,35 KB, 1 mal heruntergeladen)
|
|
|
18.01.05 18:34 |
E-Mail
Finden
Als Freund hinzufügen
|
|
Marvel
Mitglied
Dabei seit: 16.01.04
Beiträge: 303
|
|
Hack geht wirklich nicht... Voll die scheiße...
Wurde der Hack vor dem release überhaupt getestet?!
|
|
24.01.05 23:17 |
E-Mail
Finden
Als Freund hinzufügen
|
|
rellek
retired
Dabei seit: 16.01.04
Beiträge: 720
Themenstarter
|
|
Nein, weil ich habe noch >NIE< Hacks getestet, bevor ich sie release und die ganzen anderen, die damit uzfrieden sind, die sehen eine Illusion, bzw. bauen sich den Demo-Screen ins Forum ein.
Also echt mal.
Hier auch ne Live-Demo -FALLS es dich interessieren sollte: http://board.rellek.org/thread.php?threadid=5260
|
|
25.01.05 14:36 |
WWW
Finden
Als Freund hinzufügen
|
|
|
Marvel
Mitglied
Dabei seit: 16.01.04
Beiträge: 303
|
|
Zitat: |
Original von rellek
Nein, weil ich habe noch >NIE< Hacks getestet, bevor ich sie release und die ganzen anderen, die damit uzfrieden sind, die sehen eine Illusion, bzw. bauen sich den Demo-Screen ins Forum ein.
Also echt mal.
Hier auch ne Live-Demo -FALLS es dich interessieren sollte: http://board.rellek.org/thread.php?threadid=5260 |
Ich hab das eher als Scherz geschrieben :rolleyes:
Der Hack geht, aber alle Themen die davor erstellt wurde, machen net mit
Also Hack hat keine Funktion bei alten Themen, kann man das so machen das es auch bei alten Themen erscheint?
|
|
25.01.05 22:36 |
E-Mail
Finden
Als Freund hinzufügen
|
|
rellek
retired
Dabei seit: 16.01.04
Beiträge: 720
Themenstarter
|
|
Dem hack ist egal, wie alt der Thread ist - er muss ähnliche Elemente enthalten.
|
|
26.01.05 13:36 |
WWW
Finden
Als Freund hinzufügen
|
|
|
Marvel
Mitglied
Dabei seit: 16.01.04
Beiträge: 303
|
|
Zitat: |
Original von rellek
Dem hack ist egal, wie alt der Thread ist - er muss ähnliche Elemente enthalten. |
mmm komisch hab ez fast alle Themen durchgeguckt, [ja ok net fast alle aber viele] und die wo was ähnliches stand, werden die ähnliche themen nicht agezeigt...
nur wenn ich neue erstelle und es probier geht es!!!
|
|
26.01.05 22:21 |
E-Mail
Finden
Als Freund hinzufügen
|
|
rellek
retired
Dabei seit: 16.01.04
Beiträge: 720
Themenstarter
|
|
Ähnlich heißt ja bei MySQL, dass das Wort, was gefunden werden soll, ein Teil des Wortes ist, nachdem gesucht wird ..... wenn die Bedingungen nicht erfüllt werden, dann findet er eben keines...
|
|
27.01.05 13:53 |
WWW
Finden
Als Freund hinzufügen
|
|
M@K€
Mitglied
Dabei seit: 06.07.04
Beiträge: 4
|
|
Also bei mir zeigt er bei beiden varianten nur die letzten 5 Beiträge an aber nix ähnliche Themen :doof
Habe auch mal ähnliche erstellt aber er findet da nix oder besser er zeigt alle neuen an
Was steht in den postings
1mal test test
1mal link link
trotzdem wird wenn ich zum beispiel auf das Test Thema gehe Link angezeigt, da frage ich mich jetzt was haben Test und Link gemeinsam da gibt es ja nichtmal ein gleichen buchstaben. Hatte auch probiert weil sie erst im gleichen Forum waren das es daran liegt aber selbst nach dem verschieben und auch nach einem löschen und neuerstellen in einem anderen Forum kommt immer noch der Link wenn ich das thema Test aufrufe
Oder kurz gesagt die letzten 5 Beiträge werden angezeigt aber sonst nix
bevor ich nicht den Beta text eingefügt hatte ging sogar garnichts danach gehen jetzt beide varianten aber leider halt nur die letzten 5 Beiträge
Weiß jemand was das ist.
|
|
06.02.05 14:51 |
E-Mail
Finden
Als Freund hinzufügen
|
|
rellek
retired
Dabei seit: 16.01.04
Beiträge: 720
Themenstarter
|
|
Der sucht nur nach ähnlichen Überschriften.
Das heißt: Wenn du 2 Threads hast, "Test" und "Test1", und gehst in den "Test"-Thread, dann wird "Test1" gefunden, bei "Test1" wird "Test" aber nicht gefunden. Also ist MySQL schuld
|
|
07.02.05 12:48 |
WWW
Finden
Als Freund hinzufügen
|
|
rellek
retired
Dabei seit: 16.01.04
Beiträge: 720
Themenstarter
|
|
Wie willst du das mit Inhalt machen? Du musst davon ausgehen, dass der Server ein Computer ist, kein Mensch.
|
|
08.02.05 08:18 |
WWW
Finden
Als Freund hinzufügen
|
|
|