Ähnliche Themen

rellek
Titel: Ähnliche Themen
Version: 1.0
Beschreibung: Name: Ähnliche Themen
Version: 1.0
Für wBB-Version: 2.1
Getestet mit: 2.1.5

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: Im Anhang
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=534

weiter zum Download
richbid
Irgendwie wird bei mir nix angezeigt?
Templates sind importiert.
Kann es sein das noch was fehlt?
Pommes2
Dachte ich auch bei mir.. dann hab ich nen Test gehabt,bei einem Thread der 3 mal existiert und da funzte es ohne Probs.
Der Threadtitel muß bei den anderen Themen enthalten sein sonst siehste nix :-)

Big Thx Rellek,sowas in der Art wollte ich auch schon machen, nur die Zeit fehlte hehe
richbid
Ich hab nicht ein Thema was doppelt ist?
Verstehe daran auch den Sinn noch nicht so ganz?
Pommes2
Du gehst in ein Thema rein was heißt "Suche",
dieser Hack listet die dann 5 Threads wo dieses Wort im Titel vorhanden ist also Beispiel "Suche Auto" etc
richbid
Kann auch sein das es schon zu spät ist für mich.;-)
Schau mal hier:
http://www.auktionsvorlagen.de/community...d=4056#post4056

Hier müssten massig "ähnliche" Themen vorhanden sein?
Pommes2
Ist logisch das er da nix finden kann..

Dann halt mal so :
http://forum-4-all.de/thread.php?threadid=21536&sid=
richbid
Der nimmt bei dir das Wort update.
Kann es sein das das erst mit neuen Beiträgen funktioniert?
Ich hab 1000 Themen zu ebay und dort zeigt es nix an.
Pommes2
nur wenn du einen Thread hast der ebay heißt. wenn du da drauf gehst erscheinen andere Threads wo ebay im Thema(Also Titel) enthalten ist.
rellek
Das lässt sich so leider nicht umgehen, da ist mysql stur, sry dafür
Simps-O-Rama
hm... komisch... bei mir kommt auch nichts, hab alles gemcht: templates importiert, gecached, die änderungen in template&thread.php gemacht und es kommt einfach nicht, obwohl ich 3 mal einen thread hab, der test 1 & test 2 und Test heißt... verwirrt


edit:

es geht
JaY^JaY
cooler Hack! Wird es sowas für 2.2 und 2.3 auch geben? oder hab ich was übersehen Augenzwinkern
Simps-O-Rama
Zitat:
Original von JaY^JaY
cooler Hack! Wird es sowas für 2.2 und 2.3 auch geben? oder hab ich was übersehen Augenzwinkern


gibt es schon...
rellek
Zitat:
Original von JaY^JaY
cooler Hack! Wird es sowas für 2.2 und 2.3 auch geben? oder hab ich was übersehen Augenzwinkern
letzteres großes Grinsen

Gibt es für alle wBBs ab 2.1.
JaY^JaY
Ah habs nun gefunden! Danke! nochmal nen riesen LOB cool
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
hm, hab das gleiche Problem, bei mir kommt gar nichts.

Templates sind importiert und gecached, änderungen an der php auch gemacht, aber da ist alles exakt wie vorher...

ich bin da im Thema "Quasselthread Round X", davor gabs Quasselthread Round IX und VIII usw. also sollte er doch ein paar "similar" threads finden - aber absolut gar nichts :/
rellek
Probiers mal mit dem Code-Schnieps aus dem Post über deinem.
skooli
joo da kommt was, super smile

mal schaun, was der so an verwandten Themen findet, klasse hack, vielen dank dafür smile
Party-Man
ich find nix ... altes und neues codeschnipsel

neues thema test erstellt und thema test test erstellt -> nix zeigt er an

bin ich zu blöde ?