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

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

Вы не вошли.

Объявление

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

#26 2007-02-25 21:16:41

Slavik
Гость

Re: Не считать сообщения в определенных разделах

Homolibere пишет:

это позволяет не учитывать сообщения не в разделах , а только в топиках. в данном случае в топике под номером в базе 123...

Ну так если добавить все другие нумерации, которые хрантся в другой таблице не в posts а в topics, то будет именно то.

Homolibere пишет:

у разделов совсем другая нумерация, и хранится в другой таблице не в posts а в topics. так что поправьте!

ну так база данных то одна? И форум тоже как бы один? Значит и нумерации должны быть также одни...

#27 2007-02-25 21:24:57

Homolibere
Гость

Re: Не считать сообщения в определенных разделах

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

#28 2007-02-25 23:23:50

Slavik
Гость

Re: Не считать сообщения в определенных разделах

Homolibere пишет:

так как в РНР слабоват... савсем

но несмотря на это, кто-то тут тебе должен что-то поправить...

Homolibere пишет:

а как сделать это все на раздел

в начале post.php есть:

if ($tid)
    $result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, fp.post_polls, t.subject, t.closed, t.question, t.last_post, t.last_post_id, t.last_poster, t.num_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='.$tid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
else
    $result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, fp.post_polls 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='.$fid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());

если заменить

if ($tid)
    $result = $db->query('SELECT f.cat_id, f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, fp.post_polls, t.subject, t.closed, t.question, t.last_post, t.last_post_id, t.last_poster, t.num_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='.$tid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
else
    $result = $db->query('SELECT f.cat_id, f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, fp.post_polls 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='.$fid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());

То мы получим в $cur_posting['cat_id'] ид категории содержащий данный форум.

Такая поправка устроит или что-нибудь еще поправить?

#29 2007-02-25 23:41:45

Homolibere
Гость

Re: Не считать сообщения в определенных разделах

поправил, как было написано... и добавил

// If the posting user is logged in, increment his/her post count
        if (!$pun_user['is_guest'] && $cur_posting['cat_id']!=4)
        {
            $low_prio = ($db_type == 'mysql') ? 'LOW_PRIORITY ' : '';
            $db->query('UPDATE '.$low_prio.$db->prefix.'users SET num_posts=num_posts+1, last_post='.$now.' WHERE id='.$pun_user['id']) or error('Unable to update user', __FILE__, __LINE__, $db->error());
        }

однако получил:

An error was encountered
File: z:\home\test1.ru\www\post.php
Line: 42

PunBB reported: Unable to fetch forum info

Database reported: Unknown column 'fp.post_polls' in 'field list' (Errno: 1054)

Редактировался Homolibere (2007-02-26 00:09:26)

#30 2007-02-25 23:56:36

Slavik
Гость

Re: Не считать сообщения в определенных разделах

Ладно, проехали.

Просто добавляешь после SELECT в обоих запросах f.cat_id,

#31 2007-02-26 00:10:41

Homolibere
Гость

Re: Не считать сообщения в определенных разделах

все заработало, спасибо.... просто лоханулся smile и указал вместо номера категории, номер форума... огромное спасибо! big_smile

#32 2008-01-22 19:11:44

Visman
Гость

Re: Не считать сообщения в определенных разделах

Предлагаю МОД: Не считать сообщения в определенных форумах
v 1.0

1. Выполнить в плагине DB management или phpMyAdmin (заменив #__ префиксом Вашей базы).

ALTER TABLE #__forums ADD `no_sum_mess` tinyint(1) NOT NULL default '0'

2. Открыть файл admin_forums.php (правим для того, чтобы через админку задавать для форумов считать/не считать посты)

3. Найти (примероно 230 строка)

    // Fetch forum info
    $result = $db->query('SELECT id, forum_name, forum_desc, redirect_url, num_topics, sort_by, cat_id FROM '.$db->prefix.'forums WHERE id='.$forum_id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
    if (!$db->num_rows($result))
        message($lang_common['Bad request']);

Заменить на

    // Fetch forum info
    $result = $db->query('SELECT id, forum_name, forum_desc, redirect_url, num_topics, sort_by, cat_id, no_sum_mess FROM '.$db->prefix.'forums WHERE id='.$forum_id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
    if (!$db->num_rows($result))
        message($lang_common['Bad request']);

4. Найти (примерно 288 строка)

                                <tr>
                                    <th scope="row">URL переадресации</th>
                                    <td><?php echo ($cur_forum['num_topics']) ? 'Доступно только для пустых форумов' : '<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">Сообщения не засчитываются</th>
                                    <td><input type="checkbox" name="no_sum_message" value="1"<?php echo ($cur_forum['no_sum_mess']) ? ' checked="checked"' : ''; ?> /></td>
                                </tr>

5. Найти (примерно 165 строка)

        // Start with the forum details
        $forum_name = trim($_POST['forum_name']);
        $forum_desc = pun_linebreaks(trim($_POST['forum_desc']));
        $cat_id = intval($_POST['cat_id']);
        $sort_by = intval($_POST['sort_by']);
        $redirect_url = isset($_POST['redirect_url']) ? trim($_POST['redirect_url']) : null;

После добавить это

        $no_sum_message = isset($_POST['no_sum_message']) ? intval($_POST['no_sum_message']) : 0;
        if ($no_sum_message != 1) $no_sum_message = 0;

6. Найти (примерно строка 183)

        $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.', no_sum_mess='.$no_sum_message.' WHERE id='.$forum_id) or error('Unable to update forum', __FILE__, __LINE__, $db->error());

7. Сохранить файл admin_forums.php

8. Открыть AP_Forum_cleanup.php (это плагин которым можно поправить кол-во постов у каждого пользователя)

9. Найти (примерно 75 строка).

    // synchronise user posts
    $db->query('CREATE TEMPORARY TABLE IF NOT EXISTS '.$db->prefix.'user_posts SELECT poster_id, count(*)as posts FROM '.$db->prefix.'posts GROUP BY poster_id') or error('Creating posts table failed', __FILE__, __LINE__, $db->error());

Заменить на

    // synchronise user posts
    $db->query('CREATE TEMPORARY TABLE IF NOT EXISTS '.$db->prefix.'user_posts SELECT poster_id, count(f.no_sum_mess)as posts FROM '.$db->prefix.'posts AS p left JOIN '.$db->prefix.'topics as t, '.$db->prefix.'forums as f  ON (f.no_sum_mess=0 and f.id=t.forum_id) WHERE p.topic_id=t.id GROUP BY p.poster_id') or error('Creating posts table failed', __FILE__, __LINE__, $db->error());

Запрос работает, но надо проверить его логическую структуру, т.к. я не понял как JOIN работает.

10.Сохранить AP_Forum_cleanup.php

11.Открыть post.php

12.Найти (примерно 40 строка)

$result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, 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='.$fid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());

Заменить на

$result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, f.no_sum_mess 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='.$fid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());

Если стоит PMS, то рядом в условие надо добавить: , f.no_sum_mess

13.Найти (примерно 370 строка)

$db->query('UPDATE '.$low_prio.$db->prefix.'users SET num_posts=num_posts+1, last_post='.$now.' WHERE id='.$pun_user['id']) or error('Unable to update user', __FILE__, __LINE__, $db->error());

Заменить на

$db->query('UPDATE '.$low_prio.$db->prefix.'users SET '.(($cur_posting['no_sum_mess'] == 0) ? 'num_posts=num_posts+1, ' : '').'last_post='.$now.' WHERE id='.$pun_user['id']) or error('Unable to update user', __FILE__, __LINE__, $db->error());

14.Сохранить post.php

#33 2008-01-22 23:22:26

Pminaeff
Гость

Re: Не считать сообщения в определенных разделах

А можно прикрутить, не к "AP_Forum_cleanup.php", а к "AP_Author_Update.php"?

#34 2008-01-22 23:33:08

VoiD
Гость

Re: Не считать сообщения в определенных разделах

а причем тут автор апдейт? вроде ж разные совершенно моды

#35 2008-01-23 08:06:20

Visman
Гость

Re: Не считать сообщения в определенных разделах

Pminaeff пишет:

А можно прикрутить, не к "AP_Forum_cleanup.php", а к "AP_Author_Update.php"?

Вечером гляну что можно сделать smile

#36 2008-01-23 14:18:56

Visman
Гость

Re: Не считать сообщения в определенных разделах

Продолжение мода для плагина Author Update (затрагивает кнопку Синхронизировать)

15.Открыть AP_Author_Update.php

16.Найти

    // Synchronize user post counts
    $db->query('CREATE TEMPORARY TABLE IF NOT EXISTS '.$db->prefix.'post_counts SELECT poster_id, count(*) as new_num FROM '.$db->prefix.'posts GROUP BY poster_id') or error('Creating temporary table failed', __FILE__, __LINE__, $db->error());

Заменить на

    // Synchronize user post counts
    $db->query('CREATE TEMPORARY TABLE IF NOT EXISTS '.$db->prefix.'post_counts SELECT poster_id, count(*) as new_num FROM '.$db->prefix.'posts AS p, '.$db->prefix.'topics as t, '.$db->prefix.'forums as f WHERE f.no_sum_mess=0 and f.id=t.forum_id and p.topic_id=t.id GROUP BY p.poster_id') or error('Creating temporary table failed', __FILE__, __LINE__, $db->error());

17.Сохранить AP_Author_Update.php

#37 2008-01-23 14:31:18

Pminaeff
Гость

Re: Не считать сообщения в определенных разделах

Если префикса нет, то значит:

ALTER TABLE forums ADD `no_sum_mess` tinyint(1) NOT NULL default '0'

?
Visman, СПАСИБО!

#38 2008-01-23 14:41:31

Visman
Гость

Re: Не считать сообщения в определенных разделах

Pminaeff пишет:

Если префикса нет, то значит: КОД

Да, так и есть.

Pminaeff пишет:

Visman, СПАСИБО!

Не за что smile

#39 2008-02-16 08:28:48

unLockeR
Гость

Re: Не считать сообщения в определенных разделах

Pminaeff пишет:

Если префикса нет, то значит:

ALTER TABLE forums ADD `no_sum_mess` tinyint(1) NOT NULL default '0'

?
Visman, СПАСИБО!

йоптить, нету у меня такой строки в AP_DB_management.php
ткните носом, где я туплю?:/

#40 2008-02-16 09:10:22

Visman
Гость

Re: Не считать сообщения в определенных разделах

unLockeR пишет:

ткните носом, где я туплю?

ALTER TABLE #__forums ADD `no_sum_mess` tinyint(1) NOT NULL default '0'

эту команду надо выполнить в плагине DB management, а не вставлять в код плагина!
З.Ы. Команда создает поле no_sum_mess в таблице #__forums.

#41 2008-05-12 06:06:10

Dayset
Гость

Re: Не считать сообщения в определенных разделах

МОД: Не считать сообщения в определенных форумах v 1.0
При выполнении 8 9 10 пункта и после нажатия в админке Synchronise user post counts > Go! выдает:

File: /usr/local/www/apache22/data/plugins/AP_Forum_cleanup.php
Line: 76
PunBB reported: Creating posts table failed 
Database reported: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' pun_forums as f ON (f.no_sum_mess=0 and f.id=t.forum_id) WHERE p.topic_id=t.id' at line 1 (Errno: 1064) 
Failed query: CREATE TEMPORARY TABLE IF NOT EXISTS pun_user_posts SELECT poster_id, count(f.no_sum_mess)as posts FROM pun_posts AS p left JOIN pun_topics as t, pun_forums as f ON (f.no_sum_mess=0 and f.id=t.forum_id) WHERE p.topic_id=t.id GROUP BY p.poster_id

Плагин с сайта там всего 1 строку заменить - непересчитывает вобщем, дохнет(
А правка http://punbb.ru/viewtopic.php?pid=15810#p15810 плагина Author Update - v2.1 работает.. странно

И по 12 пункту, я добавлял , f.no_sum_mess не в указаную строку

$result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, 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='.$fid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());

А в ту что выше(я написал ее ниже)), иначе посткаунт увеличивался и нифига не получалось

$result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, t.subject, t.closed 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='.$tid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());

Может и я чет не так делаю?

Редактировался Dayset (2008-05-12 06:33:53)

#42 2008-05-12 14:51:54

Visman
Гость

Re: Не считать сообщения в определенных разделах

Dayset пишет:

При выполнении 8 9 10 пункта и после нажатия в админке Synchronise user post counts > Go! выдает:

Попробуй заменить в 9 пункте на это:

    // synchronise user posts
    $db->query('CREATE TEMPORARY TABLE IF NOT EXISTS '.$db->prefix.'user_posts SELECT poster_id, count(f.no_sum_mess)as posts FROM '.$db->prefix.'posts AS p, '.$db->prefix.'topics as t, '.$db->prefix.'forums as f WHERE f.no_sum_mess=0 and f.id=t.forum_id and p.topic_id=t.id GROUP BY p.poster_id') or error('Creating posts table failed', __FILE__, __LINE__, $db->error());

Тут запрос без LEFT JOIN.

А это строки 39-47 из post.php (там MOD Merge Post свои изменения вносит, так что я написал выше, что надо в оба запроса добалять , f.no_sum_mess. Но наверное коряво написал, раз не понятно smile

// Fetch some info about the topic and/or the forum
if ($tid)
// START Mod title:  Merge Post
// ADD ,p.id AS post_id, p.poster_id, p.message, p.posted
// ADD LEFT JOIN '.$db->prefix.'posts AS p ON (t.last_post_id=p.id AND p.poster_id='.$pun_user['id'].')
    $result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, t.subject, t.closed, p.id AS post_id, p.poster_id, p.message, p.posted, f.no_sum_mess FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'posts AS p ON (t.last_post_id=p.id AND p.poster_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='.$tid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
// END Mod title:  Merge Post
else
    $result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, f.no_sum_mess 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='.$fid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());

#43 2008-05-12 17:40:26

Dayset
Гость

Re: Не считать сообщения в определенных разделах

Спасибо, работает. У меня нет Merge Post
AP_Forum_cleanup.php теперь тоже считает правильно...

Подвал доски

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