Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#1 2007-02-22 16:31:33

Slavik
Гость

Мод подфорумов

Нужны ли вложенные подфорумы? То есть чтобы у каждого подфорума могли быть также подфорумы?

Редактировался Slavik (2007-02-22 16:35:14)

#2 2007-02-22 16:32:49

vvik
Гость

Re: Мод подфорумов

Да, плз.
Очень надеюсь на тебя! Обещание сдержу!!!

#3 2007-02-22 18:53:35

vvik
Гость

Re: Мод подфорумов

неужели кроме меня это на фиг никому не надо? sad

#4 2007-02-22 19:11:31

ViK Mefisto
Гость

Re: Мод подфорумов

надо, ещё как надо)
вложеные подфорумы - хорошая мысль.

#5 2007-02-22 20:09:42

Юко
Гость

Re: Мод подфорумов

Slavik
Думаю хватит просто подфорумов.
Вложенные (подфорум в подфорум) ни к чему.
smile

#6 2007-02-22 20:55:06

vvik
Гость

Re: Мод подфорумов

имхо двух уровней достаточно (то есть максимум форум-подфорум-подподфорум)
но это just imho

и на самом деле не главное, важно чтоб вообще под подфорумов был по человечески реализован

Редактировался vvik (2007-02-22 20:57:05)

#7 2007-02-22 21:02:28

Slavik
Гость

Re: Мод подфорумов

Таг. Примерный план:
index.php: + 0 запросов.
viewforum.php: +1.5 запроса (один дополняется присоединением)
viewtopic.php: +0.5 запроса
admin_forums: + 1 (но здесь это неважно)

На самом деле неважно сколько подуровней, либо один, либо не один smile Так что давайте определяться. Конечно, запрос усложняется => увеличивается нагрузка на бд, надо или нет?

Еще мне надо пару дней

#8 2007-02-22 21:47:48

vvik
Гость

Re: Мод подфорумов

а на индексе почему нуль запросов? отображение подфорумов не будет? или инфа будет уже вытянута при стандартном запросе?

з.ы. или я чего то не понимаю и буду просто смиренно ждать результата tongue

#9 2007-02-22 21:58:19

Griffon
Гость

Re: Мод подфорумов

Slavik пишет:

На самом деле неважно сколько подуровней, либо один, либо не один smile Так что давайте определяться. Конечно, запрос усложняется => увеличивается нагрузка на бд, надо или нет?

Неограниченная вложеность форумов - это гут smile

#10 2007-02-22 22:44:35

Юко
Гость

Re: Мод подфорумов

Slavik

если нет особой разницы, то "Неограниченная вложеность форумов - это гут " smile

#11 2007-02-22 22:55:24

Griffon
Гость

Re: Мод подфорумов

Юко пишет:

Slavik

если нет особой разницы, то "Неограниченная вложеность форумов - это гут " smile

По моему особая разница будет в функции generate_quickjump_cache smile)

#12 2007-02-22 23:15:54

maximum
Гость

Re: Мод подфорумов

Slavik пишет:

На самом деле неважно сколько подуровней, либо один, либо не один smile Так что давайте определяться. Конечно, запрос усложняется => увеличивается нагрузка на бд, надо или нет?

Ну а чего тут спрашивать, помоему одного хватит для любых нужд, если конечно никто не делает из форума блоги и галереи.

#13 2007-02-22 23:59:09

vvik
Гость

Re: Мод подфорумов

а может две версии рассмотреть? для начала без вложенности... а потом, если реально, как мод для мода tongue

#14 2007-02-23 01:49:08

Ha Emmid
Гость

Re: Мод подфорумов

Для начала сделать бы нормальные подфорумы с одним уровнем вложенности.

#15 2007-02-23 13:01:03

Slavik
Гость

Re: Мод подфорумов

Открываем admin_forums.php:

Ищем ~170:

        $redirect_url = isset($_POST['redirect_url']) ? trim($_POST['redirect_url']) : null;

Добавляем после:

        $parent_forum_id = intval($_POST['parent_forum']);

Ищем ~182:

        $db->query('UPDATE '.$db->prefix.'forums SET forum_name=\''.$db->escape($forum_name).'\', forum_desc='.$forum_desc.', redirect_url='.$redirect_url.', sort_by='.$sort_by.', cat_id='.$cat_id.' WHERE id='.$forum_id) or error('Unable to update forum', __FILE__, __LINE__, $db->error());

Заменяем на

        $db->query('UPDATE '.$db->prefix.'forums SET forum_name=\''.$db->escape($forum_name).'\', forum_desc='.$forum_desc.', redirect_url='.$redirect_url.', sort_by='.$sort_by.', cat_id='.$cat_id.', parent_forum_id='.$parent_forum_id.' WHERE id='.$forum_id) or error('Unable to update forum', __FILE__, __LINE__, $db->error());

Ищем ~233:

    $result = $db->query('SELECT id, forum_name, forum_desc, redirect_url, num_topics, sort_by,cat_id FROM '.$db->prefix.'forums WHERE parent_forum_id = 0 AND id='.$forum_id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());

Заменяем на:

    $result = $db->query('SELECT id, forum_name, forum_desc, redirect_url, num_topics, sort_by, cat_id, parent_forum_id FROM '.$db->prefix.'forums WHERE id='.$forum_id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());

Ищем ~304:

                                    <th scope="row">Redirect URL</th>
                                    <td><?php echo ($cur_forum['num_topics']) ? 'Only available in empty forums' : '<input type="text" name="redirect_url" size="45" maxlength="100" value="'.pun_htmlspecialchars($cur_forum['redirect_url']).'" tabindex="5" />'; ?></td>
                                </tr>

Добавляем после:

                                <tr>
                                    <th scope="row">Parent forum</th>
                                    <td>
                                        <select name="parent_forum">
                                            <option value="0">No parent forum</option>
<?php

        $result = $db->query('SELECT id, forum_name, parent_forum_id FROM '.$db->prefix.'forums WHERE parent_forum_id != '.$cur_forum['id'].' AND id != '.$cur_forum['id'].' ORDER BY disp_position') or error('Unable to fetch forum lise',__FILE__,__LINE__,$db->error());
        while($forum_list = $db->fetch_assoc($result)) {
            echo "\t\t\t\t\t\t\t\t\t\t\t".'<option value="'.$forum_list['id'].'"'.($cur_forum['parent_forum_id'] == $forum_list['id'] ? ' selected="selected"' : '').'>'.pun_htmlspecialchars($forum_list['forum_name']).'</option>'."\n";
        }

?>

                                        </select>
                                    </td>
                                </tr>

Открываем index.php

Ищем ~45:

$result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name,
 f.forum_desc, f.redirect_url, f.moderators, f.num_topics, f.num_posts, f.last_post,
 f.last_post_id, f.last_poster FROM '.$db->prefix.'categories AS c
 INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id
 LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].')
 WHERE (fp.read_forum IS NULL OR fp.read_forum=1)
 ORDER BY c.disp_position, c.id, f.disp_position', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());

Заменяем на:

$result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name,
 f.forum_desc, f.redirect_url, f.moderators, f.num_topics, f.num_posts, f.last_post,
 f.last_post_id, f.last_poster, f.parent_forum_id FROM '.$db->prefix.'categories AS c
 INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id
 LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].')
 WHERE (fp.read_forum IS NULL OR fp.read_forum=1)
 ORDER BY c.disp_position, c.id, f.disp_position, f.parent_forum_id DESC', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());

Ищем

while ($cur_forum = $db->fetch_assoc($result))
{

Заменяем на:

$subforums_array = array();
while ($cur_forum = $db->fetch_assoc($result))
{
    if ($cur_forum['parent_forum_id'] != 0) {
        if (!array_key_exists($cur_forum['parent_forum_id'], $subforums_array)) {
            $subforums_array[$cur_forum['parent_forum_id']] = array();
            }
        $subforums_array[$cur_forum['parent_forum_id']][] = '<a href="viewforum.php?id='.$cur_forum['fid'].'">'.$cur_forum['forum_name'].'</a>';
    } else {

Ищем:

        $moderators = "\t\t\t\t\t\t\t\t".'<p><em>('.$lang_common['Moderated by'].'</em> '.implode(', ', $moderators).')</p>'."\n";
    }

Добавляем после:

    if (array_key_exists($cur_forum['fid'], $subforums_array))
    {
        $subforums = "\t\t\t\t\t\t\t\t".'<p><em>('.$lang_common['Subforums'].'</em> '.implode(', ', $subforums_array[$cur_forum['fid']]).')</p>'."\n";
    } else $subforums = '';

Ищем:

                                <?php echo $forum_field."\n".$moderators ?>

Заменяем на:

                                <?php echo $forum_field."\n".$moderators."\n".$subforums ?>

Ищем:

}

// Did we output any categories and forums?
if ($cur_category > 0)

Добавляем перед:

    }

Открываем viewforum.php

Ищем:

$result = $db->query('SELECT f.forum_name, f.forum_desc, f.redirect_url, f.moderators, f.num_topics, f.cat_id, f.sort_by, fp.post_topics FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());

Заменяем на:

$result = $db->query('SELECT f.forum_name, f.forum_desc, f.redirect_url, f.moderators, f.num_topics, f.cat_id, f.sort_by, f.parent_forum_id, sf.forum_name AS parent_forum, fp.post_topics FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forums AS sf ON sf.id = f.parent_forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());

Ищем

require PUN_ROOT.'header.php';

Добавялем после:

$result = $db->query('SELECT f.id AS fid, f.forum_name,
 f.forum_desc, f.redirect_url, f.moderators, f.num_topics, f.num_posts, f.last_post,
 f.last_post_id, f.last_poster, f.parent_forum_id FROM '.$db->prefix.'forums AS f
 LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].')
 WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.parent_forum_id = '.$id.'
 ORDER BY f.disp_position, f.parent_forum_id DESC') or error('Unable to fetch forum list', __FILE__, __LINE__, $db->error());


// array for subforums
$subforums_array = array();
if ($db->num_rows($result)) {
?>
<div id="idx<?php echo $cat_count ?>" class="blocktable">
    <h2>
        <span><?php echo $lang_common['Subforums'] ?></span>
    </h2>
    <div class="box">
        <div class="inbox">
            <table cellspacing="0">
            <thead>
                <tr>
                    <th class="tcl" scope="col"><?php echo $lang_common['Forum'] ?></th>
                    <th class="tc2" scope="col"><?php echo $lang_common['Topics'] ?></th>
                    <th class="tc3" scope="col"><?php echo $lang_common['Posts'] ?></th>
                    <th class="tcr" scope="col"><?php echo $lang_common['Last post'] ?></th>
                </tr>
            </thead>
            <tbody>
<?php

while ($cur_subforum = $db->fetch_assoc($result))
{
    $moderators = '';

    $item_status = '';
    $icon_text = $lang_common['Normal icon'];
    $icon_type = 'icon';

    // Are there new posts?
    if (!$pun_user['is_guest'] && $cur_forum['last_post'] > $pun_user['last_visit'])
    {
        $item_status = 'inew';
        $icon_text = $lang_common['New icon'];
        $icon_type = 'icon inew';
    }

    // Is this a redirect forum?
    if ($cur_forum['redirect_url'] != '')
    {
        $forum_field = '<h3><a href="'.pun_htmlspecialchars($cur_subforum['redirect_url']).'" title="'.$lang_index['Link to'].' '.pun_htmlspecialchars($cur_subforum['redirect_url']).'">'.pun_htmlspecialchars($cur_subforum['forum_name']).'</a></h3>';
        $num_topics = $num_posts = '&nbsp;';
        $item_status = 'iredirect';
        $icon_text = $lang_common['Redirect icon'];
        $icon_type = 'icon';
    }
    else
    {
        $forum_field = '<h3><a href="viewforum.php?id='.$cur_subforum['fid'].'">'.pun_htmlspecialchars($cur_subforum['forum_name']).'</a></h3>';
        $num_topics = $cur_subforum['num_topics'];
        $num_posts = $cur_subforum['num_posts'];
    }

    if ($cur_subforum['forum_desc'] != '')
        $forum_field .= "\n\t\t\t\t\t\t\t\t".$cur_subforum['forum_desc'];


    // If there is a last_post/last_poster.
    if ($cur_subforum['last_post'] != '') {
                $last_post = '<a href="viewtopic.php?pid='.$cur_subforum['last_post_id'].'#p'.
                $cur_subforum['last_post_id'].'">'.format_time($cur_subforum['last_post']).
                '</a><br /><span class="byuser">'.$lang_common['by'].'&nbsp;'.pun_htmlspecialchars($cur_subforum['last_poster']).
                '</span>';
                }
        else
                $last_post = '&nbsp;';

    if ($cur_subforum['moderators'] != '')
    {
        $mods_array = unserialize($cur_subforum['moderators']);
        $moderators = array();

        while (list($mod_username, $mod_id) = @each($mods_array))
            $moderators[] = '<a href="profile.php?id='.$mod_id.'">'.pun_htmlspecialchars($mod_username).'</a>';

        $moderators = "\t\t\t\t\t\t\t\t".'<p><em>('.$lang_common['Moderated by'].'</em> '.implode(', ', $moderators).')</p>'."\n";
    }

?>

                 <tr<?php if ($item_status != '') echo ' class="'.$item_status.'"'; ?>>
                    <td class="tcl">
                        <div class="intd">
                            <div class="<?php echo $icon_type ?>"><div class="nosize"><?php echo $icon_text ?></div></div>
                            <div class="tclcon">
                                <?php echo $forum_field."\n".$moderators."\n".$subforums ?>
                            </div>
                        </div>
                    </td>
                    <td class="tc2"><?php echo $num_topics ?></td>
                    <td class="tc3"><?php echo ($num_posts - $num_topics) ?></td>
                    <td class="tcr"><?php echo $last_post ?></td>
                </tr>

<?php


}

?>
            </tbody>
            </table>
        </div>
    </div>
</div>
<?php
}

Ищем (дважды):

        <ul><li><a href="<?php echo $index_link ?>"><?php echo $lang_common['Index'] ?></a>&nbsp;</li><li>&raquo;&nbsp;<?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></li></ul>

заменяем на:

        <ul><li><a href="<?php echo $index_link ?>"><?php echo $lang_common['Index'] ?></a>&nbsp;</li><?php echo ($cur_forum['parent_forum'] != '' ? '<li>&raquo;&nbsp;<a href="viewforum.php?id='.$cur_forum['parent_forum_id'].'">'.$cur_forum['parent_forum'].'</a>&nbsp;</li>' : '') ?><li>&raquo;&nbsp;<?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></li></ul>

Открываем viewtopic.php

Ищем:

// Fetch some info about the topic
if (!$pun_user['is_guest'])
    $result = $db->query('SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, s.user_id AS is_subscribed FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'subscriptions AS s ON (t.id=s.topic_id AND s.user_id='.$pun_user['id'].') LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.$id.' AND t.moved_to IS NULL') or error('Unable to fetch topic info', __FILE__, __LINE__, $db->error());
else
    $result = $db->query('SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.$id.' AND t.moved_to IS NULL') or error('Unable to fetch topic info', __FILE__, __LINE__, $db->error());

Заменяем на:

// Fetch some info about the topic
if (!$pun_user['is_guest'])
    $result = $db->query('SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, f.parent_forum_id, sf.forum_name AS parent_forum, fp.post_replies, s.user_id AS is_subscribed FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forums AS sf ON sf.id = f.parent_forum_id LEFT JOIN '.$db->prefix.'subscriptions AS s ON (t.id=s.topic_id AND s.user_id='.$pun_user['id'].') LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.$id.' AND t.moved_to IS NULL') or error('Unable to fetch topic info', __FILE__, __LINE__, $db->error());
else
    $result = $db->query('SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, f.parent_forum_id, sf.forum_name AS parent_forum, fp.post_replies FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.$id.' AND t.moved_to IS NULL') or error('Unable to fetch topic info', __FILE__, __LINE__, $db->error());

Ищем:

        <ul><li><a href="index.php"><?php echo $lang_common['Index'] ?></a>&nbsp;</li><li>&raquo;&nbsp;<a href="viewforum.php?id=<?php echo $cur_topic['forum_id'] ?>"><?php echo pun_htmlspecialchars($cur_topic['forum_name']) ?></a></li><li>&nbsp;&raquo;&nbsp;<?php echo pun_htmlspecialchars($cur_topic['subject']) ?></li></ul>

Заменяем на:

        <ul><li><a href="index.php"><?php echo $lang_common['Index'] ?></a>&nbsp;</li><?php echo ($cur_topic['parent_forum'] != '' ? '<li>&raquo;&nbsp;<a href="viewforum.php?id='.$cur_topic['parent_forum_id'].'">'.$cur_topic['parent_forum'].'</a>&nbsp;</li>' : '') ?><li>&raquo;&nbsp;<a href="viewforum.php?id=<?php echo $cur_topic['forum_id'] ?>"><?php echo pun_htmlspecialchars($cur_topic['forum_name']) ?></a></li><li>&nbsp;&raquo;&nbsp;<?php echo pun_htmlspecialchars($cur_topic['subject']) ?></li></ul>

Открываем search.php:
ищем:

$result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.redirect_url FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.redirect_url IS NULL ORDER BY c.disp_position, c.id, f.disp_position', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());

$cur_category = 0;
while ($cur_forum = $db->fetch_assoc($result))
{
    if ($cur_forum['cid'] != $cur_category)    // A new category since last iteration?
    {
        if ($cur_category)
            echo "\t\t\t\t\t\t\t".'</optgroup>'."\n";

        echo "\t\t\t\t\t\t\t".'<optgroup label="'.pun_htmlspecialchars($cur_forum['cat_name']).'">'."\n";
        $cur_category = $cur_forum['cid'];
    }
    echo "\t\t\t\t\t\t\t\t".'<option value="'.$cur_forum['fid'].'">'.pun_htmlspecialchars($cur_forum['forum_name']).'</option>'."\n";
}

Заменяем на:

$result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.redirect_url, f.parent_forum_id FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.redirect_url IS NULL ORDER BY c.disp_position, c.id, f.disp_position, f.parent_forum_id DESC', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());

$cur_category = 0;
$subforums = array();
while ($cur_forum = $db->fetch_assoc($result))
{
    if ($cur_forum['cid'] != $cur_category)    // A new category since last iteration?
    {
        if ($cur_category)
            echo "\t\t\t\t\t\t\t".'</optgroup>'."\n";

        echo "\t\t\t\t\t\t\t".'<optgroup label="'.pun_htmlspecialchars($cur_forum['cat_name']).'">'."\n";
        $cur_category = $cur_forum['cid'];
    }

    if ($cur_forum['parent_forum_id'] != 0) {
        if (!array_key_exists($cur_forum['parent_forum_id'], $subforums)) {
            $subforums[$cur_forum['parent_forum_id']] = array();
            }
        $subforums[$cur_forum['parent_forum_id']][] = "\t\t\t\t\t\t\t\t".'<option value="'.$cur_forum['fid'].'">&nbsp;&nbsp;'.pun_htmlspecialchars($cur_forum['forum_name']).'</option>';
    } else {
        echo "\t\t\t\t\t\t\t\t".'<option value="'.$cur_forum['fid'].'">'.pun_htmlspecialchars($cur_forum['forum_name']).'</option>'."\n";
        if (array_key_exists($cur_forum['fid'], $subforums)) {
            echo implode('', $subforums[$cur_forum['fid']]);
            }
      }
}

Открываем cache.php

Ищем:

        $result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.redirect_url FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$group_id.') WHERE fp.read_forum IS NULL OR fp.read_forum=1 ORDER BY c.disp_position, c.id, f.disp_position', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());

        $cur_category = 0;
        while ($cur_forum = $db->fetch_assoc($result))
        {
            if ($cur_forum['cid'] != $cur_category)    // A new category since last iteration?
            {
                if ($cur_category)
                    $output .= "\t\t\t\t\t\t".'</optgroup>'."\n";

                $output .= "\t\t\t\t\t\t".'<optgroup label="'.pun_htmlspecialchars($cur_forum['cat_name']).'">'."\n";
                $cur_category = $cur_forum['cid'];
            }

            $redirect_tag = ($cur_forum['redirect_url'] != '') ? ' &gt;&gt;&gt;' : '';
            $output .= "\t\t\t\t\t\t\t".'<option value="'.$cur_forum['fid'].'"<?php echo ($forum_id == '.$cur_forum['fid'].') ? \' selected="selected"\' : \'\' ?>>'.pun_htmlspecialchars($cur_forum['forum_name']).$redirect_tag.'</option>'."\n";
        }

Заменяем на:

        $result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.redirect_url, f.parent_forum_id FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$group_id.') WHERE fp.read_forum IS NULL OR fp.read_forum=1 ORDER BY c.disp_position, c.id, f.disp_position, f.parent_forum_id DESC', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());

        $subforums = array();
        $cur_category = 0;
        while ($cur_forum = $db->fetch_assoc($result))
        {
            if ($cur_forum['cid'] != $cur_category)    // A new category since last iteration?
            {
                if ($cur_category)
                    $output .= "\t\t\t\t\t\t".'</optgroup>'."\n";

                $output .= "\t\t\t\t\t\t".'<optgroup label="'.pun_htmlspecialchars($cur_forum['cat_name']).'">'."\n";
                $cur_category = $cur_forum['cid'];
            }

        if ($cur_forum['parent_forum_id'] != 0) {
            if (!array_key_exists($cur_forum['parent_forum_id'], $subforums)) {
                $subforums[$cur_forum['parent_forum_id']] = array();
                }
            $subforums[$cur_forum['parent_forum_id']][] = "\t\t\t\t\t\t\t\t".'<option value="'.$cur_forum['fid'].'">&nbsp;&nbsp;'.pun_htmlspecialchars($cur_forum['forum_name']).'</option>';
        } else {
            $redirect_tag = ($cur_forum['redirect_url'] != '') ? ' &gt;&gt;&gt;' : '';
            $output .= "\t\t\t\t\t\t\t".'<option value="'.$cur_forum['fid'].'"<?php echo ($forum_id == '.$cur_forum['fid'].') ? \' selected="selected"\' : \'\' ?>>'.pun_htmlspecialchars($cur_forum['forum_name']).$redirect_tag.'</option>'."\n";
            if (array_key_exists($cur_forum['fid'], $subforums)) {
                $output .= implode('', $subforums[$cur_forum['fid']]);
            }
          }
        }

Открываем lang/Russian/common.php и добавляем:

'Topics'                =>    'Тем',
'Subforums'                =>    'Подфорумы',

Пр этом 'Topics' можно удалить из index.php

Вроде все. Вложенности нету. Сразу чувсвую что будут проблемы с последней темой в форумах, так как себе я добавил еще 2 поля в табличку forums, и избавился от присоединения.

P.S. Если сразу не заработает матом не орать!

Редактировался Slavik (2007-02-26 13:31:02)

#16 2007-02-23 14:12:12

spycam
Гость

Re: Мод подфорумов

Оффтоп как-то ставил мод подфорумов, глянул на количество запросов и офигел... 150

#17 2007-02-23 15:00:23

artoodetoo
Гость

Re: Мод подфорумов

Была бы кнопочка "+репутация", я бы за Slavik проголосовал, хотя лично мне данный мод неинтересен.

#18 2007-02-23 15:38:34

Юко
Гость

Re: Мод подфорумов

Slavik
спасибо, будем пробовать smile

#19 2007-02-24 23:02:15

Slavik
Гость

Re: Мод подфорумов

artoodetoo пишет:

Была бы кнопочка "+репутация", я бы за Slavik проголосовал, хотя лично мне данный мод неинтересен.

А ты в примечании напиши чтоб не забыть smile

vvik пишет:

Да, плз.
Очень надеюсь на тебя! Обещание сдержу!!!

Вот так всегда, сначала просят, а потом забивают, спрашивается кому я делал...

#20 2007-02-24 23:26:31

vvik
Гость

Re: Мод подфорумов

Slavik
никто не забивает - жду рабочих дней, чтоб на работу выйти. у меня тама все настроено, а не дома. в понедельник сразу начну пробовать, юзать, и сразу все впишу smile

p.s. если за эти два дня дозреет новая система, то и дома будет все стоять и смогу уже и дома всем этим заниматься smile

Редактировался vvik (2007-02-24 23:27:21)

#21 2007-02-26 12:21:42

vvik
Гость

Re: Мод подфорумов

вопросы по мере установки:
1. в админ_форуме вторая замена
в строке запроса, которую надо заменить, упоминается некая kind='.$kind' - в чистой борде (1.2.14 версии) такого нет.
2. в третьей замене в админ_форуме
кроме кинда, еще тоже что то
3. во вьюфоруме замены
голосовалки
....
в общем - на чистую борду ставится с трудом. я конечно пробую вылизать, чтоб поставился мод..... о результатах уже ближе к вечеру, скорее всего
но чую, что беда еще больше будет - ведь в БД нигде не добавляются доп таблицы, которые используются модом...
sad


___________________________

в общем как и ожидалось
нумбо раз в админке

An error was encountered
File: z:\home\test4.ru\www\board\admin_forums.php
Line: 239

PunBB reported: Unable to fetch forum info 

Database reported: Unknown column 'parent_forum_id' in 'field list' (Errno: 1054) 

Failed query: SELECT id, forum_name, forum_desc, redirect_url, num_topics, sort_by, cat_id, parent_forum_id FROM bd_forums WHERE id=2

нумбо два в индексе

An error was encountered
File: z:\home\test4.ru\www\board\index.php
Line: 50

PunBB reported: Unable to fetch category/forum list 

Database reported: Unknown column 'f.parent_forum_id' in 'field list' (Errno: 1054) 

Failed query: SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.forum_desc, f.redirect_url, f.moderators, f.num_topics, f.num_posts, f.last_post, f.last_post_id, f.last_poster, f.parent_forum_id FROM bd_categories AS c INNER JOIN bd_forums AS f ON c.id=f.cat_id LEFT JOIN bd_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=1) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) ORDER BY c.disp_position, c.id, f.disp_position, f.parent_forum_id DESC

Редактировался vvik (2007-02-26 15:08:56)

#22 2007-02-26 13:28:27

Slavik
Гость

Re: Мод подфорумов

1. Просто убираешь из запроса kind, сейчас пост исправлю
2. Там вроде только kind неродной...
3. Не понял вопроса

Ну установщик от того мода подойдет, там сделать-то надо:

            $db->query('ALTER TABLE '.$db->prefix.'forums ADD COLUMN parent_forum_id INTEGER UNSIGNED DEFAULT 0;');

Добавлено спустя     1 минуту   54 секунды:
Понял про голосовалки

#23 2007-02-26 14:38:15

vvik
Гость

Re: Мод подфорумов

Slavik пишет:

Ну установщик от того мода подойдет, там сделать-то надо:

от того - это от какого? есть вроде два - французский и еще какой то

и там достаточно будет только эту строку заменить? остальное убирать\менять не надо?

_________

все понял smile

Добавлено спустя     36 минут   7 секунд:
З_ДОРОВО! smile
СПАСИБ!!!!!!!! Пахает! smile

а можно еще доделать так, чтобы в админке было видно, что такой то форум является подфорумом такого то форума (а то только через едит видно) - ну типа как в поиске - друг под дружкой с отбивкой smile

p/s/ сегодня-завтра буду тестить. на счет последних тем - имхо даже лучше, чтобы последние темы не из подфорумов брались, а из самого родительского форума при отображении на индексе

Редактировался vvik (2007-02-26 15:15:13)

#24 2007-02-26 17:05:31

Slavik
Гость

Re: Мод подфорумов

vvik пишет:

З_ДОРОВО!
СПАСИБ!!!!!!!! Пахает!

Вот и славненько smile

vvik пишет:

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

Ну там еще что-то типа:

// Display all the categories and forums
$result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.disp_position FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id ORDER BY c.disp_position, c.id, f.disp_position') or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());

$cur_category = 0;
while ($cur_forum = $db->fetch_assoc($result))
{
    if ($cur_forum['cid'] != $cur_category)    // A new category since last iteration?
    {
        if ($cur_category != 0)
            echo "\t\t\t\t\t\t\t".'</table>'."\n\t\t\t\t\t\t".'</div>'."\n\t\t\t\t\t".'</fieldset>'."\n\t\t\t\t".'</div>'."\n";

?>
                <div class="inform">
                    <fieldset>
                        <legend>Category: <?php echo pun_htmlspecialchars($cur_forum['cat_name']) ?></legend>
                        <div class="infldset">
                            <table cellspacing="0">
<?php

        $cur_category = $cur_forum['cid'];
    }

?>
                                <tr>
                                    <th><a href="admin_forums.php?edit_forum=<?php echo $cur_forum['fid'] ?>">Edit</a> - <a href="admin_forums.php?del_forum=<?php echo $cur_forum['fid'] ?>">Delete</a></th>
                                    <td>Position&nbsp;&nbsp;<input type="text" name="position[<?php echo $cur_forum['fid'] ?>]" size="3" maxlength="3" value="<?php echo $cur_forum['disp_position'] ?>" tabindex="<?php echo $tabindex_count ?>" />
                                    &nbsp;&nbsp;<strong><?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></strong></td>
                                </tr>
<?php
    $tabindex_count += 2;
}

и меняем на:

// Display all the categories and forums
$result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.disp_position, f.parent_forum_id FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id ORDER BY c.disp_position, c.id, f.disp_position, f.parent_forum_id DESC') or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());

$subforums = array();
$cur_category = 0;
while ($cur_forum = $db->fetch_assoc($result))
{
    if ($cur_forum['parent_forum_id'] != 0) {
        if (!array_key_exists($cur_forum['parent_forum_id'], $subforums))
            $subforums[$cur_forum['parent_forum_id']] = array();
        $subforums[$cur_forum['parent_forum_id']][] =
'                                <tr>
                                    <th><a href="admin_forums.php?edit_forum='.$cur_forum['fid'].'">Edit</a> - <a href="admin_forums.php?del_forum='.$cur_forum['fid'].'">Delete</a></th>
                                    <td>Position&nbsp;&nbsp;<input type="text" name="position['.$cur_forum['fid'].']" size="3" maxlength="3" value="'.$cur_forum['disp_position'].'" tabindex="'.$tabindex_count.'" />
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>'.pun_htmlspecialchars($cur_forum['forum_name']).'</strong></td>
                                </tr>';
    }
    else {
    if ($cur_forum['cid'] != $cur_category)    // A new category since last iteration?
    {
        if ($cur_category != 0)
            echo "\t\t\t\t\t\t\t".'</table>'."\n\t\t\t\t\t\t".'</div>'."\n\t\t\t\t\t".'</fieldset>'."\n\t\t\t\t".'</div>'."\n";

?>
                <div class="inform">
                    <fieldset>
                        <legend>Category: <?php echo pun_htmlspecialchars($cur_forum['cat_name']) ?></legend>
                        <div class="infldset">
                            <table cellspacing="0">
<?php

        $cur_category = $cur_forum['cid'];
    }

?>
                                <tr>
                                    <th><a href="admin_forums.php?edit_forum=<?php echo $cur_forum['fid'] ?>">Edit</a> - <a href="admin_forums.php?del_forum=<?php echo $cur_forum['fid'] ?>">Delete</a></th>
                                    <td>Position&nbsp;&nbsp;<input type="text" name="position[<?php echo $cur_forum['fid'] ?>]" size="3" maxlength="3" value="<?php echo $cur_forum['disp_position'] ?>" tabindex="<?php echo $tabindex_count ?>" />
                                    &nbsp;&nbsp;<strong><?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></strong></td>
                                </tr>
<?php

    if (array_key_exists($cur_forum['fid'], $subforums))
        echo implode('', $subforums[$cur_forum['fid']]);

    $tabindex_count += 2;
    }
}

Редактировался Slavik (2007-02-26 19:59:07)

#25 2007-02-26 18:17:18

vvik
Гость

Re: Мод подфорумов

пасиб!

ммм... при этом он сначала перечисляет все сабфорумы, а потом их же уже ...
в общем пикча

http://angelsin.net/users/765291/adminka.jpg

видать из за этой же беды, при создании нового форума в новой категории - сабфорумы почему то отображаются там...

и кстати довесок - так понимаю, Position трогать нельзя иначе начинает колбасить не по детски

Добавлено спустя     12 минут   49 секунд:
в общем по любому - СПАСИБО! smile

footer.php
....<p class="conr" style="font-variant: small-caps">powered by <a style="text-decoration: none;"
href="http://punbb.org/">punbb</a>&<a style="text-decoration: none;"
href="http://punres.org/">punres</a> + <a style="text-decoration: none;"
href="http://litforum.org.ru/">slavik</a>.......... :)

Редактировался vvik (2007-02-26 18:41:20)

Подвал доски

Под управлением FluxBB. Хостинг Hostens