1

Тема: "Суперкатегории"

Была такая тема: Поиск не только в топиках.
Из нее у меня естественным образом родилась идея "суперкатегорий" - группировка форумов по доп. признаку.
Допустим мы хотим чтобы на нашем сайте главное меню выглядело так:

<Домой> <Форум> <Статьи> <Галерея> <Пользователи>

При этом "Статьи" и "Галерея" разумно делать как разновидность все тех же топиков --  чтобы не создавать новый поиск и раздачу вправ.
Если сама "статья" -- это первый пост темы, а коментарии к статье - это ответы - все сильно упрощается. С галереей та же история.
Остается реализовать механизм фильтрации форумов, чтобы выводились либо только разделы со статьями, либо только галереи и т.д.

1. в таблицу forums добавляем новую целочисленную колонку kind.
Предположим значение 0 в ней будет означать "обычный форум", 1 - "статьи", 2 - "галереи", 3 - "новости на главную страницу"

alter table forums add ( kind tinyint(2) default 0)

1a. В файл common.php прописываем константы для наглядного представления. Хорошее место для них - сразу после строки
define('PUN_MEMBER', 4);

// Define kind of forum
define('PUN_KIND_COMMON', 0);
define('PUN_KIND_ARTICLE', 1);
define('PUN_KIND_GALLERY', 2);
define('PUN_KIND_NEWS', 3);
$valid_kinds = array(PUN_KIND_COMMON, PUN_KIND_NEWS, PUN_KIND_ARTICLE, PUN_KIND_GALLERY);

2. изменяем скрипт index.php (или forum.php если вы сделали некий Miniportal):
ищем строку

require PUN_ROOT.'header.php';

сразу за ней вставляем:

$kind_filter = (isset($_GET['kind']))?intval($_GET['kind']):0;

пора уже заняться собственно фильтрацией. ищем такое

// Print the categories and forums
$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());

заменяем на

// Print the categories and forums
$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 f.kind='.$kind_filter.' AND (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());

обратили внимание на [mono]WHERE f.kind='.$kind_filter.' AND ([/mono]???

Суперкатегории есть! На этом этапе надо сделать проверку.
По-умолчанию все форумы остались просто форумами, т.к. KIND по-умолчанию == 0.
Если все сделали правильно - то форум продолжает работать как и прежде, а если вызвать такой УРЛ: [mono]index.php?kind=1[/mono] (вместо index.php может быть forum.php) -- то получим пустой пока список "статей".


3. Нашему Админу нужен инструмент для описания типа форума (forum.kind):
Открываем файл admin_forums.php. Здесь больше всего поправочек! В каждой замене есть слово KIND smile
ищем

        $sort_by = intval($_POST['sort_by']);

вставляем после него

        $kind = intval($_POST['kind']);

ищем

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

ищем

    $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());

заменяем на

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

ищем

                                <tr>
                                    <th scope="row">Sort topics by</th>

вставляем ПЕРЕД ним

                                <tr>
                                    <th scope="row">Kind</th>
                                    <td>
                                        <select name="kind" tabindex="4">
<?php
    foreach($valid_kinds as $kind) {
        $selected = ($kind == $cur_forum['kind']) ? ' selected="selected"' : '';
        echo "\t\t\t\t\t\t\t\t\t\t\t".'<option value="'.$kind.'"'.$selected.'>'.pun_htmlspecialchars($lang_common['Forum kind '.$kind]).'</option>'."\n";
    }
?>
                                        </select>
                                    </td>
                                </tr>

вот где нам пригодился массив [mono]$valid_kinds[/mono] из common.php!

4. Все готово, кроме готовых ссылок на суперкатегории. Открываем functions.php, ищем функцию generate_navlinks()
где-то в первых строчках добавляете свои:

    $links[] = '<li id="navarticle"><a href="forum.php?kind='.PUN_KIND_ARTICLE.'">'.$lang_common['Articles'].'</a>';
    $links[] = '<li id="navgallery"><a href="forum.php?kind='.PUN_KIND_GALLERY.'">'.$lang_common['Galleries'].'</a>';

оппа! у нас не описаны локализационные строчки [mono]$lang_common['Articles'][/mono] и [mono]$lang_common['Galleries'][/mono]
срочно исправляем:

5. В каждом языковом файле common.php добавляем описания. я приведу только для русского. Открываем файл lang/Russian/common.php
в любом понравившемся месте вставляем такие строки:

'Forums'            =>    'Форумы',
'Articles'            =>    'Статьи',
'Galleries'            =>    'Галереи',
'News'                =>    'Новости'

конец! как я настраиваю свои "Статьи" и "Галереи" я расскажу в другой раз

Сайт artoodetoo

Поделиться

2

Re: "Суперкатегории"

хм. очень интересно и оригинально! где можно посмотреть на это решение вживую?

Сайт hcs

Поделиться

3 (08.12.2006 04:44 отредактировано artoodetoo)

Re: "Суперкатегории"

пока только на локальном компе smile
в эти выходные подготовлю инсталл и дам ссылку для скачки
тесты будут вот здесь:
_http://*/

Сайт artoodetoo

Поделиться

4 (13.12.2006 23:06 отредактировано artoodetoo)

Re: "Суперкатегории"

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

скачать мою сборку для тестирования можно по адресу: http: //master.1wd.ru/download/punbb_pe_001.zip - устарело. см. ниже
очень сырая версия, но кому-то может быть интересной. буду рад, если кто-то составит компанию в разработке. обязательно прочтите readme!

Сайт artoodetoo

Поделиться

5

Re: "Суперкатегории"

Как я понял статьи и галерея это обычные топики?

Сайт Slavik

Поделиться

6 (10.12.2006 13:21 отредактировано artoodetoo)

Re: "Суперкатегории"

Slavik пишет:

Как я понял статьи и галерея это обычные топики?

В общем - да. Главное, что заложена правильная технология -- суть в разделении форумов на отдельные наборы.  При этом поиск и права делаются единообразно. Ну и обратите внимание на УРЛы.
punbb-pe.org.ru/download/tn_rights.gif punbb-pe.org.ru/download/tn_preview.gif
Сейчас топик типа "Галерея" отличается большой превьюхой присоединенной картинки. Причем эта превьюха выводится в начале каждой страницы топика. В будущем форум типа "галерея" будет отображать маленькие превьюхи из каждой темы форума - вот это можно будет назвать "настоящей галереей".

Топик типа "Статья" будет на первой странице содержать только один пост. Комментарии - начиная со второй страницы и далее.

Топики типа "Новости" - обычные. Просто фильтр на фронтальной странице выводит последние новостные топики. Новости, одним словом.

Работы еще много, вобщем. Кстати, я обновил архив.

Сайт artoodetoo

Поделиться

7 (16.12.2006 13:19 отредактировано artoodetoo)

Re: "Суперкатегории"

Эволюционные изменения:

- превью в галерее (во viewforum.php): punbb-pe.org.ru/download/tn_galpreview.gif
- галерея по форуму и по топику.
- исправлена часть багов и недоделок, в основном в ЧПУ
- уточнен контроль прав на вложения

новый архив v0.0.3b здесь - ниже новая версия

Сайт artoodetoo

Поделиться

8 (24.12.2006 14:08 отредактировано artoodetoo)

Re: "Суперкатегории"

топик типа "статья" готов. в целом задача выполнена
- разделение форумов по типам (суперкатегории)
- топики разного вида
- галерея с контролем прав
- метки тем
- ЧПУ
PunBB Power Edition v0.0.4 beta
hot fix: functions_portal.php - вывод новостей
вживую здесь

надо отшлифовать, отдебагить. прошу высказываться!

(дополнение)
Новый релиз закрывает многие недочеты, прежде всего в галерее и чпу.
PunBB Power Edition v0.0.5 beta

Сайт artoodetoo

Поделиться

9

Re: "Суперкатегории"

считаю просто необходимыми взаимно моды аттач и аякс превью (потому что иначе просто жмешь превью - и сбрасываются выбранные аттачи sad

а еще - ктонибудь сделайте как здесь: 194.187.207.250/forum/topic.php?id=5

чтобы аттачи можно было вставлять тегами в сообщение?

(караз это я и пробовал на тока что скаченном PunBB Power Edition v0.0.5 beta

Добавлено Mon Dec 25 20:25:08 2006 :
artoodetoo

как ды делал мод_реврайт? - по pun_rewrite или punoogle ?

русскоЯзЪ

Поделиться

10

Re: "Суперкатегории"

artoodetoo
судя по размеру архив - это весь форум. Можно ли все это в ридми затолкать?

Сайт Slavik

Поделиться

11

Re: "Суперкатегории"

2maru пишет:

а еще - ктонибудь сделайте как здесь: 194.187.207.250/forum/topic.php?id=5

Со smart attach tag'ами запарки были. Пришлось сделать добавление сообщения с пост-обработкой чтобы эти теги заменять на соответствующие им финальные тэги (соответственно типу файла). По причине того что добавление аттачей происходит после добавления сообщения. Может быть можно это все вывернуть (сначала файлы аттачить а потом сообщение), но по-моему при этом возникали какие-то другие проблемы (уже плохо помню smile ).

Поделиться

12 (25.12.2006 19:52 отредактировано artoodetoo)

Re: "Суперкатегории"

2maru пишет:

как ды делал мод_реврайт? - по pun_rewrite или punoogle ?

Не знаю что такое punoogle. Я подсмотрел как планируется делать ЧПУ в версии 1.3. Разница в том, что в 1.3 ЧПУ можно включать/выключать. Считаю это бессмысленной фишкой.
AJAX буду пробовать обязательно. Интересная технология. Пока просто некогда.

2maru пишет:

а еще - ктонибудь сделайте как здесь: 194.187.207.250/forum/topic.php?id=5

Спасибо за ссылку! Правда пишет, что мой IP в спам-листе, но очень интересное решение. Добавлю в power edition!

(добавление)
Еще, 2maru, увидел твой пост в теме "attachment mod" про коментарии к статьям. Отвечу здесь, т.к. ты явно промахнулся темой.
Почему комментарии со второй страницы? Потому что Статья по определению это более двух абзацев, скорее надо думать как резать одну статью на несколько страниц!

Есть принципиальная разница между типичным первым сообщением топика и статьей. Топики, как правило, содержат вопрос требующий разъяснения. поэтому комментарии к первому посту важнее самого поста. Со статьей все не так. Она "самодостаточна". Надеюсь я хорошо объяснил.

Сайт artoodetoo

Поделиться

13

Re: "Суперкатегории"

Можно вынести опцию в настройки "Показывать комментарии на той же странице" или типа того,  каждый юзер сам себе сможет настроить.

Сайт hcs

Поделиться

14

Re: "Суперкатегории"

hcs пишет:

Можно вынести опцию в настройки "Показывать комментарии на той же странице"

Не надо увеличивать мировую энтропию!
На форумах разработчиков уже поднималась такая тема: ссылки с поисковиков типа Google или Yandex не попадают на нужную страницу форума. Когда пользователь дробит сообщения иначе, чем это делается по-умолчанию, он будет попадать не туда по ссылкам типа <темаX/страницаY>.
У меня руки чешутся убрать существующие опции "Выбор отображения страниц: Тем, Сообщений".

Сайт artoodetoo

Поделиться

15

Re: "Суперкатегории"

artoodetoo
Дурацкий антиспамовский мод почему то всех вподряд блокирует. Отключил его нафиг (это касабельно 194.187.207.250/forum )
Если есть вопросы - задавайте.

Поделиться

16

Re: "Суперкатегории"

задаю: - очень-очень-очень-очень хочу себе аттач мод с смарт-тегами вложений!!!

но я не программист и не понимаю как это сделать sad
просто по ридми могу хак установить на форум и всё... sad

русскоЯзЪ

Поделиться

17 (27.12.2006 03:28 отредактировано Dexus)

Re: "Суперкатегории"

Я могу разве что выложить исходники своего форума. А какие именно места касаются смарт-тегов - это надо сравнивать с оригиналом, я когда модировал форум не задавался целью все свои модификации делать "раздельными", поэтому тут только скопом, и дальнейшее аккуратное вырезание конкретного "мода"...

Там я кстати маленько переделал саму процедуру заливки аттачментов. Чтобы можно было по несколько штук за раз заливать.
И саму структуру аттачментов тоже. В оригинале там используется механизм что аттачменты имеют "хаотическое" название с расширением .attach (вроде), и скрипт-даунлоадер. Я же сделал заливку с оригинальным названием файла, и добавлением {N} в заголовок если такое имя уже существует. В самих сообщениях ссылка идет не на сам файл, а на все тот же скрипт аттача, который применяет рулесы. Конечно остается "дыра", что можно пользовать прямую и достаточно читабельную ссылку на файл. Но не зная как она называется один фиг ее не угадаешь.
Цель этого была в том, чтобы использовать встроенный _полноценный_ движок апача для скачки файлов. Дефолтовый скрипт не поддерживает ни многопоточность, ни докачку. Я как ни пытался этот скрипт сделать "цивильным" чтоб он и докачку поддерживал и многопоточность - не получилось sad.

Поделиться

18

Re: "Суперкатегории"

Dexus, выложи пожалуйста!

Сайт artoodetoo

Поделиться

19 (27.12.2006 06:03 отредактировано Dexus)

Re: "Суперкатегории"

Держи. Если будешь не просто ковырять сырцы, а вообще устанавливать - надо будет все install*.php позапускать по очереди smile

Поделиться

20

Re: "Суперкатегории"

Dexus, с установкой были сложности, но поставил и попробовал. скажем так - есть еще над чем поработать wink аттач может не приаттачиться без объяснения причин - такая фишка у мода, с тегом [imgid=...] или [i=...] не справился - не показывает у меня ничего. идея интересная, вот реализацию не получилось увидеть.

Сайт artoodetoo

Поделиться

21

Re: "Суперкатегории"

artoodetoo
С установкой сложности? Единственная сложность в том, что нужно все 14 инсталлов по очереди устанавливать.
Ни разу не было что "не мог приаттачить". Может быть это связанно с настройками php?

Поделиться

22

Re: "Суперкатегории"

сейчас могу что-то упустить, но были ошибки типа "неизвестная переменная $pun_root", была лишняя запятая в одном из create table... после установки выяснилось, что в админке есть еще один путь, кроме Base URL и он автоматом смотрит куда-то не туда... вобщем потребовалась ручная работа и нет уверенности, что сейчас встало как надо.

Сайт artoodetoo

Поделиться

23

Re: "Суперкатегории"

artoodetoo
пробую установить PunBB Power Edition v0.0.5 beta, установка проходит нормально. создаю конфиг, вписываю туда предлагаемые данные. на любой странице получаю сообщение - The file 'config.php' doesn't exist or is corrupt. Please run install.php to install PunBB first.
sad

Добавлено  01.11.2007 10:01:27:
ок, конфиг положил куда надо, но сразу начались проблемы с чпу. инафига оно надо??

Добавлено  01.11.2007 10:01:10:

artoodetoo пишет:

Я подсмотрел как планируется делать ЧПУ в версии 1.3. Разница в том, что в 1.3 ЧПУ можно включать/выключать. Считаю это бессмысленной фишкой.

Это грубая ошибка smile щас бы я выключил чпу и был бы счастлив...

Сайт hcs

Поделиться

24

Re: "Суперкатегории"

вобщем сейчас я имею ошибку чпу такого вида:
404
Not Found
The requested URL /topic/1 was not found on this server.

Добавлено  01.11.2007 11:01:40:
мда, были отключены некоторые возможности в апаче из соображений безопасности. сейчас все работает, но всетаки обязательное чпу имхо неправильно.

Сайт hcs

Поделиться

25 (10.01.2007 23:32 отредактировано artoodetoo)

Re: "Суперкатегории"

The requested URL /topic/1 was not found on this server.

это дело вкуса, конечно, но я для себя принял решение: раз уж я пользую СУПЕРКАТЕГОРИИ, то они должны выглядеть как forum/*, gallery/* и т.д., а значит ЧПУ - необходимая часть этой сборки.
.htaccess должен быть как указан и mod_rewrite должен быть включен.

Дополнение:
Сейчас накопилось много нового по сравнению с 0.0.5b, но я не готов ее выложить. Отлаживаю на боевом сервере. Когда результат меня устроит - вычленю оттуда все узкоспециализированное и выложу обновление. Это после Старого Нового Года, видимо будет.
Есть рейтинги темы, изменения в стилях, багфиксы в ЧПУ, поправки в галерее, новые сервисы для портальной странички ...

Боевой сервер смотреть здесь

Сайт artoodetoo

Поделиться