Хак к форуму vBulletin.
Автор
ivank
(Иван Коростелёв)
Все изменения в forumdisplay.php
Около 420 строки, после
Код: // display threads if (!($forumperms & CANVIEWOTHERS)) $limitothers = "AND postuserid = $bbuserinfo[userid] AND $bbuserinfo[userid] <> 0"; else $limitothers = ''; // filter out deletion notices if can't be seen if (!($forumperms & CANSEEDELNOTICE) AND !can_moderate($forumid)) { $delthreadlimit = "AND deletionlog.primaryid IS NULL"; $deljoin = "LEFT JOIN deletionlog ON(thread.threadid = deletionlog.primaryid AND type = 'thread')"; } else { $delthreadlimit = ''; $deljoin = ''; } |
надо добавить
Код: $filter_sql = $filter_url_ext = ''; if (isset($_GET['filter_string']) && isset($_GET['filter_by'])) { $filter_string = strtolower(str_replace('"', '', $_GET['filter_string'])); $filter_by = str_replace('"', '', $_GET['filter_by']); $filter_url_ext = "&filter_by=$filter_by&filter_string=$filter_string"; if ($filter_by == 'poster') $filter_by = 'thread.postusername'; else $filter_by = "thread.title"; $filter_sql = "AND LOWER($filter_by) LIKE \"%$filter_string%\""; // показываем темы за все дни, независимо от того, как это выбрано у пользователя в настройках $daysprune = -1; } |
Около 520, вместо
Код: $threadscount = $DB_site->query_first(" SELECT COUNT(*) AS threads, SUM(IF(lastpost>=$lastread AND open<>10,1,0)) AS newthread FROM thread $deljoin WHERE forumid = $foruminfo[forumid] AND sticky = 0 AND visible = 1 $globalignore $limitothers $delthreadlimit "); |
должно быть
Код: $threadscount = $DB_site->query_first(" SELECT COUNT(*) AS threads, SUM(IF(lastpost>=$lastread AND open<>10,1,0)) AS newthread FROM thread $deljoin WHERE forumid = $foruminfo[forumid] AND sticky = 0 AND visible = 1 $globalignore $limitothers $delthreadlimit " .$filter_sql ); |
около 550 строки надо поменять
Код: $stickies = $DB_site->query(" SELECT threadid FROM thread AS thread $deljoin WHERE forumid = $foruminfo[forumid] AND visible = 1 AND sticky = 1 $limitothers $globalignore $delthreadlimit "); |
на
Код: $stickies = $DB_site->query(" SELECT threadid FROM thread AS thread $deljoin WHERE forumid = $foruminfo[forumid] AND visible = 1 AND sticky = 1 $limitothers $globalignore $delthreadlimit " . $filter_sql ); |
Около 610, вместо
Код: $getthreadids = $DB_site->query(" SELECT " . iif($sortfield == 'voteavg', $votequery) . " threadid FROM thread AS thread $deljoin WHERE forumid = $foruminfo[forumid] AND sticky = 0 AND visible = 1 $globalignore $datecut $limitothers $delthreadlimit ORDER BY sticky DESC, $sqlsortfield $sqlsortorder LIMIT $limitlower, $perpage "); |
должно быть:
Код: $getthreadids = $DB_site->query(" SELECT " . iif($sortfield == 'voteavg', $votequery) . " threadid FROM thread AS thread $deljoin WHERE forumid = $foruminfo[forumid] AND sticky = 0 AND visible = 1 $globalignore $datecut $limitothers $delthreadlimit " .$filter_sql. " ORDER BY sticky DESC, $sqlsortfield $sqlsortorder LIMIT $limitlower, $perpage "); |
В шаблон FORUMDISPLAY надо добавить в необходимое место нечто вроде
Код: <form action="/forumdisplay.php" method="get"> <input type=hidden name=f value="$forumid"> Фильтр: <input class=bginput type=text size=14 name=filter_string value="$filter_string"> по <select name=filter_by> <option value=title>названию темы <option value=poster>автору </select> <input class=button type=submit value="ok"> </form><if condition="isset($filter_string) and $filter_string != ''"> <br><a href="/forumdisplay.php?f=$forumid" class=smallest2>Сбросить фильтр</a> </if> |
Все права хака принадлежат автору, обратная связь c автором ivank@ivank.ru