![]() |
| |||||||
| Registrieren | Galerie | Hilfe | Kalender | Spielhalle | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
| hacks von rellek Alles zum wBB von rellek. |
![]() |
| | LinkBack (1) | Themen-Optionen | Ansicht |
| ||||
Ähnliche Themen von rellek (01.01.2005, 16:40) 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. MySQL5-Probleme? Hier klicken: Ähnliche Themen 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: -
__________________ ...gehen Sie bitte weiter, hier gibt es nichts zu sehen | Diskussion über soziale Software? | Pieps, pieps | Horst | Murat | Achmed | Knut II. Code: cyberdyne:~# init 0 init: Ach leck mich am Netzteil! |
| ||||
AW: Ähnliche Themen von rellek (06.01.2005, 15:17)
Wer am Beta-Test der neuen Version teilnehmen möchte, der ersetzt bitte den längeren Abschnitt zwischen den beiden Code: /* Ähnliche Themen */ Code: /* Ähnliche Themen Ende */ Code: /* Ä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;
}
$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 = 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).' [...]';
eval("\$similar_thread_bit .= \"".$tpl->get("thread_similarthread_bit")."\";");
}
eval("\$similar_thread = \"".$tpl->get("thread_similarthread")."\";");
}
/* Ähnliche Themen Ende */
__________________ ...gehen Sie bitte weiter, hier gibt es nichts zu sehen | Diskussion über soziale Software? | Pieps, pieps | Horst | Murat | Achmed | Knut II. Code: cyberdyne:~# init 0 init: Ach leck mich am Netzteil! |
| ||||
AW: Ähnliche Themen von rellek (09.01.2005, 06:22)
Neuer Fix. Code: /* Ä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 */
__________________ ...gehen Sie bitte weiter, hier gibt es nichts zu sehen | Diskussion über soziale Software? | Pieps, pieps | Horst | Murat | Achmed | Knut II. Code: cyberdyne:~# init 0 init: Ach leck mich am Netzteil! |
| ||||
AW: Ähnliche Themen von rellek (11.04.2006, 08:49)
Für alle mit mySQL 5-Problemen!!! Ersetze die Codestelle in der thread.php damit: Code: /* Ähnliche 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
WHERE t.visible='1'
AND t.closed <> 3
AND t.threadid <> $threadid
AND x.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 */
__________________ ...gehen Sie bitte weiter, hier gibt es nichts zu sehen | Diskussion über soziale Software? | Pieps, pieps | Horst | Murat | Achmed | Knut II. Code: cyberdyne:~# init 0 init: Ach leck mich am Netzteil! |
| ||||
AW: Ähnliche Themen von AvA (22.10.2007, 08:01)
Hi, ich weiß nicht genau, ob es nach soooo langer Zeit noch Support für diesen Hack gibt - ich versuch's einfach. Mein Problem ist, dass dieser Hack zwar beim regulären Style von Woltlab funktioniert, nicht aber beim Style, das ich gern nutzen würde (Together). Da zerreißt es es das Template total. Falls jemand ohne viel Mühe weiß, was ich umschreiben muß, wäre ich für Hilfe dankbar. Hier der Link, so schaut es aus: klick P.S. WBB ist Version 2.13 |
| ||||
AW: Ähnliche Themen von rellek (22.10.2007, 08:17)
1) Solltest du schleunigste auf die aktuellste Version (2.1.6 glaub ich) aktualisieren, wegen Schließung von Sicherheitslücken 2) Der Style... hast du den auch in der 2.1er Version installiert? Ich meine, nicht dass da das Problem versteckt ist und der Hack am Ende nichts dafür kann... 3) Fehlt in der Themenansicht der CSS-Code, da kann der Hack wahrscheinlich nichts für
__________________ ...gehen Sie bitte weiter, hier gibt es nichts zu sehen | Diskussion über soziale Software? | Pieps, pieps | Horst | Murat | Achmed | Knut II. Code: cyberdyne:~# init 0 init: Ach leck mich am Netzteil! |
| ||||
AW: Ähnliche Themen von rellek (22.10.2007, 18:42)
2) Ja ist klar... Wenn bei der Themenanzeige das Problem ist, betriffts natürlich auch den Quickreply weil der ja auch da angezeigt wird 3) Normalerweise schon. Aber bei dir anscheinend nicht. Häng doch mal das Template thread und index an. NICHT die PHP-Dateien, sondern die Templates (die gibts im Admin-Panel). Und zwar die aus diesem Together-Style.
__________________ ...gehen Sie bitte weiter, hier gibt es nichts zu sehen | Diskussion über soziale Software? | Pieps, pieps | Horst | Murat | Achmed | Knut II. Code: cyberdyne:~# init 0 init: Ach leck mich am Netzteil! |
| ||||
AW: Ähnliche Themen von rellek (23.10.2007, 19:27)
Womit hast du das denn gespeichert? Mit einem normalen Texteditor?
__________________ ...gehen Sie bitte weiter, hier gibt es nichts zu sehen | Diskussion über soziale Software? | Pieps, pieps | Horst | Murat | Achmed | Knut II. Code: cyberdyne:~# init 0 init: Ach leck mich am Netzteil! |
| ||||
AW: Ähnliche Themen von rellek (24.10.2007, 15:25)
Das ist schon besser. Pack-Format wär mir btw egal, kam nur aufm Inhalt an. Dafür reicht zur Not auch Notepad ![]() und da haben wir auch schon den Fehler gefunden im Template "thread": Code: $headincludes
__________________ ...gehen Sie bitte weiter, hier gibt es nichts zu sehen | Diskussion über soziale Software? | Pieps, pieps | Horst | Murat | Achmed | Knut II. Code: cyberdyne:~# init 0 init: Ach leck mich am Netzteil! |
| ||||
AW: Ähnliche Themen von AvA (26.10.2007, 09:23)
Wow! Tatsächlich. Ich hätte niemals DORT den Fehler gesucht, geschweige denn gefunden *lach* Freu mich sehr und bedanke mich bei Dir *rüberwink* Falls Woltlab in diesem Leben noch reagiert (Update), sind Deine Hacks das Erste, das ich einbaue ; ) |
![]() |
| Lesezeichen |
| Stichworte |
| addon, burning board, themen, wbb, wbb 2.1, ähnlich, ähnliche themen |
| Themen-Optionen | |
| Ansicht | |
| |
LinkBacks (?)
LinkBack zu diesem Thema: http://board.rellek.org/hacks-rellek/aehnliche-themen-5104/p1.html | ||||
| Erstellt von | Für | Typ | Datum | |
| Viktor's Supportboard | MySQL und PHP | [Hilfe gesucht] Nach Umzug Mysql Fehler ? | Beitrag #0 | Refback | 22.10.2008 20:57 | |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [2.3] Ähnliche Themen | rellek | hacks von rellek | 122 | 29.03.2009 12:07 |
| [2.2] Ähnliche Themen | rellek | hacks von rellek | 24 | 11.04.2006 08:48 |
| Themen Ähnliche hmm? | CSchulle | Test- und Spam-Forum | 1 | 06.01.2005 15:09 |