Ähnliche Themen

rellek
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
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 !
skooli
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...
rellek
Gibt es auch ähnliche Themen?
Marvel
Hack geht wirklich nicht... Voll die scheiße...
Wurde der Hack vor dem release überhaupt getestet?! Augen rollen
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
Marvel
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 Augenzwinkern
Also Hack hat keine Funktion bei alten Themen, kann man das so machen das es auch bei alten Themen erscheint?
rellek
Dem hack ist egal, wie alt der Thread ist - er muss ähnliche Elemente enthalten.
Marvel
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!!!
rellek
Ä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...
M@K€
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 verwirrt

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.
rellek
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 unglücklich
martin21
Super Idee!!! Könnte man auf phonetische Ähnlichkeiten erweitern großes Grinsen Alle Umlaute werden weggelassen, und dann der rest verglichen großes Grinsen

Ansonsten wäre es toll, wenn sich dieser Hack auch auf den Inhalt beziehen würde *duck* ok scheiss viel Arbeit und sehr viel Abfragen großes Grinsen
rellek
Wie willst du das mit Inhalt machen? Du musst davon ausgehen, dass der Server ein Computer ist, kein Mensch.
demut
Der hack hat mit der Originalversion (also nicht der neuen Beta) zwar weniger gefunden, die Ergebnisse waren aber besser. Nach dem Einbau des betacodes scheint der Vergleich nahezu beliebig. Es werden nur Themenüberschriften verglichen, oder?
rellek
Ja, da werden nur die Überschriften verglichen, wie vorher eben auch.
Nur, dass nicht nach dem Betreff in seiner Gesamtheit, sondern nach einzelnen Wörtern gesucht wird.
demut
Ist eine weitere Version in Planung?
Und ganz "nebenbei" - Danke für den Hack! :-)
rellek
Ja, ist. Diese wird u.a. im Profil deaktivierbar sein und eine andere (möglicherweise bessere) Technologie, um ähnliche Themen zu finden (ja, schonmalwieder großes Grinsen )
demut
:-) Super! Bin gespannt und bin auch gerne Betatester, falls gesucht.
Alluidh
Der Hack ist absolut spassig ... Freue mich schon sehr auf die neue Version ...

Danke, rellek

Alluidh