Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Нужны ли вложенные подфорумы? То есть чтобы у каждого подфорума могли быть также подфорумы?
Редактировался Slavik (2007-02-22 16:35:14)
Да, плз.
Очень надеюсь на тебя! Обещание сдержу!!!
неужели кроме меня это на фиг никому не надо?
надо, ещё как надо)
вложеные подфорумы - хорошая мысль.
Slavik
Думаю хватит просто подфорумов.
Вложенные (подфорум в подфорум) ни к чему.
имхо двух уровней достаточно (то есть максимум форум-подфорум-подподфорум)
но это just imho
и на самом деле не главное, важно чтоб вообще под подфорумов был по человечески реализован
Редактировался vvik (2007-02-22 20:57:05)
Таг. Примерный план:
index.php: + 0 запросов.
viewforum.php: +1.5 запроса (один дополняется присоединением)
viewtopic.php: +0.5 запроса
admin_forums: + 1 (но здесь это неважно)
На самом деле неважно сколько подуровней, либо один, либо не один Так что давайте определяться. Конечно, запрос усложняется => увеличивается нагрузка на бд, надо или нет?
Еще мне надо пару дней
а на индексе почему нуль запросов? отображение подфорумов не будет? или инфа будет уже вытянута при стандартном запросе?
з.ы. или я чего то не понимаю и буду просто смиренно ждать результата
На самом деле неважно сколько подуровней, либо один, либо не один Так что давайте определяться. Конечно, запрос усложняется => увеличивается нагрузка на бд, надо или нет?
Неограниченная вложеность форумов - это гут
Slavik
если нет особой разницы, то "Неограниченная вложеность форумов - это гут "
Slavik
если нет особой разницы, то "Неограниченная вложеность форумов - это гут "
По моему особая разница будет в функции generate_quickjump_cache )
На самом деле неважно сколько подуровней, либо один, либо не один smile Так что давайте определяться. Конечно, запрос усложняется => увеличивается нагрузка на бд, надо или нет?
Ну а чего тут спрашивать, помоему одного хватит для любых нужд, если конечно никто не делает из форума блоги и галереи.
а может две версии рассмотреть? для начала без вложенности... а потом, если реально, как мод для мода
Для начала сделать бы нормальные подфорумы с одним уровнем вложенности.
Открываем 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 = ' ';
$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'].' '.pun_htmlspecialchars($cur_subforum['last_poster']).
'</span>';
}
else
$last_post = ' ';
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> </li><li>» <?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></li></ul>
заменяем на:
<ul><li><a href="<?php echo $index_link ?>"><?php echo $lang_common['Index'] ?></a> </li><?php echo ($cur_forum['parent_forum'] != '' ? '<li>» <a href="viewforum.php?id='.$cur_forum['parent_forum_id'].'">'.$cur_forum['parent_forum'].'</a> </li>' : '') ?><li>» <?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> </li><li>» <a href="viewforum.php?id=<?php echo $cur_topic['forum_id'] ?>"><?php echo pun_htmlspecialchars($cur_topic['forum_name']) ?></a></li><li> » <?php echo pun_htmlspecialchars($cur_topic['subject']) ?></li></ul>
Заменяем на:
<ul><li><a href="index.php"><?php echo $lang_common['Index'] ?></a> </li><?php echo ($cur_topic['parent_forum'] != '' ? '<li>» <a href="viewforum.php?id='.$cur_topic['parent_forum_id'].'">'.$cur_topic['parent_forum'].'</a> </li>' : '') ?><li>» <a href="viewforum.php?id=<?php echo $cur_topic['forum_id'] ?>"><?php echo pun_htmlspecialchars($cur_topic['forum_name']) ?></a></li><li> » <?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'].'"> '.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'] != '') ? ' >>>' : '';
$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'].'"> '.pun_htmlspecialchars($cur_forum['forum_name']).'</option>';
} else {
$redirect_tag = ($cur_forum['redirect_url'] != '') ? ' >>>' : '';
$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)
Оффтоп как-то ставил мод подфорумов, глянул на количество запросов и офигел... 150
Была бы кнопочка "+репутация", я бы за Slavik проголосовал, хотя лично мне данный мод неинтересен.
Slavik
спасибо, будем пробовать
Была бы кнопочка "+репутация", я бы за Slavik проголосовал, хотя лично мне данный мод неинтересен.
А ты в примечании напиши чтоб не забыть
Да, плз.
Очень надеюсь на тебя! Обещание сдержу!!!
Вот так всегда, сначала просят, а потом забивают, спрашивается кому я делал...
Slavik
никто не забивает - жду рабочих дней, чтоб на работу выйти. у меня тама все настроено, а не дома. в понедельник сразу начну пробовать, юзать, и сразу все впишу
p.s. если за эти два дня дозреет новая система, то и дома будет все стоять и смогу уже и дома всем этим заниматься
Редактировался vvik (2007-02-24 23:27:21)
вопросы по мере установки:
1. в админ_форуме вторая замена
в строке запроса, которую надо заменить, упоминается некая kind='.$kind' - в чистой борде (1.2.14 версии) такого нет.
2. в третьей замене в админ_форуме
кроме кинда, еще тоже что то
3. во вьюфоруме замены
голосовалки
....
в общем - на чистую борду ставится с трудом. я конечно пробую вылизать, чтоб поставился мод..... о результатах уже ближе к вечеру, скорее всего
но чую, что беда еще больше будет - ведь в БД нигде не добавляются доп таблицы, которые используются модом...
___________________________
в общем как и ожидалось
нумбо раз в админке
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)
1. Просто убираешь из запроса kind, сейчас пост исправлю
2. Там вроде только kind неродной...
3. Не понял вопроса
Ну установщик от того мода подойдет, там сделать-то надо:
$db->query('ALTER TABLE '.$db->prefix.'forums ADD COLUMN parent_forum_id INTEGER UNSIGNED DEFAULT 0;');
Добавлено спустя 1 минуту 54 секунды:
Понял про голосовалки
Ну установщик от того мода подойдет, там сделать-то надо:
от того - это от какого? есть вроде два - французский и еще какой то
и там достаточно будет только эту строку заменить? остальное убирать\менять не надо?
_________
все понял
Добавлено спустя 36 минут 7 секунд:
З_ДОРОВО!
СПАСИБ!!!!!!!! Пахает!
а можно еще доделать так, чтобы в админке было видно, что такой то форум является подфорумом такого то форума (а то только через едит видно) - ну типа как в поиске - друг под дружкой с отбивкой
p/s/ сегодня-завтра буду тестить. на счет последних тем - имхо даже лучше, чтобы последние темы не из подфорумов брались, а из самого родительского форума при отображении на индексе
Редактировался vvik (2007-02-26 15:15:13)
З_ДОРОВО!
СПАСИБ!!!!!!!! Пахает!
Вот и славненько
а можно еще доделать так, чтобы в админке было видно, что такой то форум является подфорумом такого то форума
Ну там еще что-то типа:
// 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 <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 ?>" />
<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 <input type="text" name="position['.$cur_forum['fid'].']" size="3" maxlength="3" value="'.$cur_forum['disp_position'].'" tabindex="'.$tabindex_count.'" />
<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 <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 ?>" />
<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)
пасиб!
ммм... при этом он сначала перечисляет все сабфорумы, а потом их же уже ...
в общем пикча
http://angelsin.net/users/765291/adminka.jpg
видать из за этой же беды, при создании нового форума в новой категории - сабфорумы почему то отображаются там...
и кстати довесок - так понимаю, Position трогать нельзя иначе начинает колбасить не по детски
Добавлено спустя 12 минут 49 секунд:
в общем по любому - СПАСИБО!
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)