Модернизация speedbar для torrentpier2

L

ler

Гость
############################################################
## Название хака: Вывод категории в speedbar
## Автор: ler
## Сложность: легко
## Версия движка: TP2 R400
## Время установки: 1 мин
## Редактируем: viewtopic.php,viewtopic.tpl,viewforum.php,viewforum.tpl
############################################################

Имеем
Сайт > форум > подфорум
Получим
Сайт > категория > форум >подфорум



Редактируем /viewtopic.php
После
PHP:
$forum_id = $t_data['forum_id'];
Вставить
PHP:
$cat_id = $t_data['cat_id'];

После
PHP:
$forum_name  = $t_data['forum_name'];
Вставить
PHP:
$cat_name  = $t_data['cat_title'];





Находим
PHP:
// Get forum/topic data
if ($topic_id)
{
    $sql = "SELECT t.*, f.*
        FROM ". BB_TOPICS ." t, ". BB_FORUMS ." f
        WHERE t.topic_id = $topic_id
            AND f.forum_id = t.forum_id
        LIMIT 1";
}
else if ($post_id)
{
    $sql = "SELECT t.*, f.*, p.post_time
        FROM ". BB_TOPICS ." t, ". BB_FORUMS ." f, ". BB_POSTS ." p
        WHERE p.post_id = $post_id
            AND t.topic_id = p.topic_id
            AND f.forum_id = t.forum_id
        LIMIT 1";
}
Заменяем на
PHP:
if ($topic_id)
{
    $sql = "SELECT t.*, f.*, c.cat_title
FROM ". BB_TOPICS ." t, ". BB_FORUMS ." f, ". BB_CATEGORIES ." c
WHERE t.topic_id = $topic_id
AND f.forum_id = t.forum_id
AND c.cat_id = f.cat_id
LIMIT 1";
}
else if ($post_id)
{
    $sql = "SELECT t.*, f.*, p.post_time, c.cat_title
FROM ". BB_TOPICS ." t, ". BB_FORUMS ." f, ". BB_POSTS ." p, ". BB_CATEGORIES ." c
WHERE p.post_id = $post_id
AND t.topic_id = p.topic_id
AND f.forum_id = t.forum_id
AND c.cat_id = f.cat_id
LIMIT 1";
}

После
PHP:
$view_forum_url = "viewforum.php?f=$forum_id";
Вставить
PHP:
$view_cat_url = "index.php?c=$cat_id";

После
PHP:
'FORUM_ID'            => $forum_id,
Вставить
PHP:
'CAT_ID'            => $cat_id,
'CAT_NAME'          => htmlCHR($cat_name),


Редактируем templates/.../viewtopic.tpl
HTML:
    <td class="nav w100" style="padding-left: 8px;">
        <a href="{U_INDEX}">{T_INDEX}</a>
        <!-- IF HAS_PARENT_FORUM --> <em>&raquo;</em>&nbsp;<a href="{PARENT_FORUM_HREF}">{PARENT_FORUM_NAME}</a><!-- ENDIF -->
        <em>&raquo;</em>&nbsp;<a href="{U_VIEW_FORUM}">{FORUM_NAME}</a>
    </td>

Заменить на
HTML:
    <td class="nav w100" style="padding-left: 8px;">
        <a href="{U_INDEX}">{T_INDEX}</a> <em>&raquo;</em>&nbsp;<a href="{U_VIEW_CAT}">{CAT_NAME}</a><!-- IF HAS_PARENT_FORUM --> <em>&raquo;</em>&nbsp;<a href="{PARENT_FORUM_HREF}">{PARENT_FORUM_NAME}</a><!-- ENDIF -->
        <em>&raquo;</em>&nbsp;<a href="{U_VIEW_FORUM}">{FORUM_NAME}</a>
    </td>

Редактируем /viewforum.php
После

PHP:
'FORUM_ID'            => $forum_id,
    'FORUM_NAME'          => htmlCHR($forum_data['forum_name']),
Вставить
PHP:
'CAT_ID'            => $cat_id,
    'CAT_NAME'          => htmlCHR($cat_name),

После
PHP:
obtain_word_list($orig_word, $replacement_word);
Вставить
PHP:
$view_cat_url = "index.php?c=$cat_id";

Перед
PHP:
unset($forums, $rowset);
Вставить
PHP:
$cat_id = $forum_data['cat_id'];
$cat_name = $forums['cat_title_html'][$forum_data['cat_id']];

После
PHP:
'U_VIEW_FORUM'        => FORUM_URL . $forum_id,

Вставить
PHP:
'U_VIEW_CAT'        => $view_cat_url,





Редактируем templates/.../viewforum.tpl
HTML:
    <td class="nav w100" style="padding-left: 8px;">
        <a href="{U_INDEX}">{T_INDEX}</a>
        <!-- IF HAS_PARENT_FORUM --> <em>&raquo;</em>&nbsp;<a href="{PARENT_FORUM_HREF}">{PARENT_FORUM_NAME}</a><!-- ENDIF -->
        <em>&raquo;</em>&nbsp;<a href="{U_VIEW_FORUM}">{FORUM_NAME}</a>
    </td>

Заменить на
HTML:
    <td class="nav w100" style="padding-left: 8px;">
        <a href="{U_INDEX}">{T_INDEX}</a> <em>&raquo;</em>&nbsp;<a href="{U_VIEW_CAT}">{CAT_NAME}</a><!-- IF HAS_PARENT_FORUM --> <em>&raquo;</em>&nbsp;<a href="{PARENT_FORUM_HREF}">{PARENT_FORUM_NAME}</a><!-- ENDIF -->
        <em>&raquo;</em>&nbsp;<a href="{U_VIEW_FORUM}">{FORUM_NAME}</a>
    </td>
 
G

Gemini_13

Гость
Сайт > раздел > категория > подкатегория

если исходить из твоей логики, то должно быть по правильному вот так:
Сайт > категория > раздел > подраздел
раздел - это форум

да и вообще, зачем пихать дополнительный запрос, когда можно подправить существующие?
PHP:
// Get forum/topic data
if ($topic_id)
{
    $sql = "SELECT t.*, f.*
        FROM ". BB_TOPICS ." t, ". BB_FORUMS ." f
        WHERE t.topic_id = $topic_id
            AND f.forum_id = t.forum_id
        LIMIT 1";
}
else if ($post_id)
{
    $sql = "SELECT t.*, f.*, p.post_time
        FROM ". BB_TOPICS ." t, ". BB_FORUMS ." f, ". BB_POSTS ." p
        WHERE p.post_id = $post_id
            AND t.topic_id = p.topic_id
            AND f.forum_id = t.forum_id
        LIMIT 1";
}

P.S. да, и уже доделай и выложи как отдельный мод
 

fly_indiz

Пользователь
Чуть не испугался, думая что за speedbar, думал мод какой-то хитрый.. :)
Ну вообще эта фишка уже где-то когда-то была, искать влом, но далеко не всем нужно выводить категорию, и эта фишка пошла лесом.

смысл в том что это viewtopic.php - основная боевая единица, на которую основной урон посещаемости,
так что лишнее
$cat_name = DB()->fetch_row($sql);

совсем нехорошо.
сat_title можно выковырять в тех же 2-х запросах, откуда и заполняется начальная $t_data не добавляя лишних запросов, а смодифицировав существующие без сильной нагрузки, как выше Gemini написал.
1-ый запрос:
Код:
SELECT t.*, f.*, c.cat_title
FROM ". BB_TOPICS ." t, ". BB_FORUMS ." f, ". BB_CATEGORIES ." c
WHERE t.topic_id = $topic_id
AND f.forum_id = t.forum_id
AND c.cat_id = f.cat_id
LIMIT 1
2-ой запрос пониже:
Код:
SELECT t.*, f.*, p.post_time, c.cat_title
FROM ". BB_TOPICS ." t, ". BB_FORUMS ." f, ". BB_POSTS ." p, ". BB_CATEGORIES ." c
WHERE p.post_id = $post_id
AND t.topic_id = p.topic_id
AND f.forum_id = t.forum_id
AND c.cat_id = f.cat_id
LIMIT 1
 
L

ler

Гость
если исходить из твоей логики, то должно быть по правильному вот так:

На самом деле раздел более глобальное понятие чем категория
И если уж совсем правильно, то будет так
Сайт > категория > форум > подфорум

Вот только не пойму почему уровень вложенности ограничен в торрентпир
 

fly_indiz

Пользователь
Вот только не пойму почему уровень вложенности ограничен в торрентпир

логика работы с форумами не менялась и пришла из phpBB2. Надо курить умную дудку и подумать кстати как преодолеть. Самому надоело такое положение вещей. Попробуем на входных апдэйтом на эту тему заняться

И если уж совсем правильно, то будет так Сайт > категория > форум > подфорум
ага, давайте придерживаться текущей терминологии, чтоб не путать других.

Идея то впринципе неплоха. Можно назвать мод будет типа "Вывод категории в форумах и топиках". Может кому полезно будет ))
 

fly_indiz

Пользователь
Код:
$cat_id = $forum_data['cat_id'];
//var_dump($cat_id);
$sql="SELECT cat_title FROM ". BB_CATEGORIES ." WHERE cat_id = $cat_id";
$cat_name = DB()->fetch_row($sql);
$cat_name = $cat_name['cat_title'];

в обновлённой инструкции опять теже грабли.
не нужен там этот запрос. то что тебе нужно наверняка находится в
PHP:
$forums['cat_title_html'][$forum_data['cat_id']]

и поменять
Имеем
Сайт > форум > подфорум
Получим
Сайт > категория > форум > подфорум
на правильные названия чтоб не путать людей
 
Сверху