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

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

Вы не вошли.

Объявление

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

#1 2011-06-09 06:32:12

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

FluxBB with mods от artoodetoo

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

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

Преимущества:

  • Авторы могут вносить правки, исправлять ошибки и для этого не надо иметь отдельных скриптов. Всё делается существующими средствами

  • Если в пункт меню добавился пункт, если обновлённая версия форума что-то поменяла в расположении элементов и т.д. всё это автоматически применится и к "страничкам".

Реализация
  1. Свой .htaccess который будет перехватывать обращения к несуществующим страницам и отправлять их на нах обработчик:

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} \.html
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+) page.php?alias=$1

    все ненайденные странички будут обрабатываться page.php, адрес страницы будет в GET-параметре alias

  2. Скрипт page.php который по адресу (алиасу) будет определять какой пост надо считать, затем текст сообщения обрамлять в шаблон и выводить.
    (Код обработчика я приведу ниже)

  3. Таблица пар алиас-адрес_реальной_страницы_viewtopic. Сюда можно добавить еще одну возможность: если адрес нацелен не на viewtopic, делать простой редирект.

    CREATE TABLE `p_aliases` (
      `alias` varchar(255) NOT NULL,
      `link` varchar(255) NOT NULL,
      `template` varchar(255) NOT NULL,
      PRIMARY KEY  (`alias`)
    );

    Префикс p_ замените на свой

Обратите внимание, в .htaccess я отлавливаю только адреса с расширением .html. Это сделано, чтобы скрипт-обработчик не делал лишнюю работу например когда браузер запрашивает иконку favicon.ico или каку-то опечатку с форумным адресом вроде viewtop.php?id=123. Вы можете изменить правило как захотите. Я себя ограничил алиасами *.html. Сам скрипт-обработчик способен переваривать любые адреса.

<?php

function not_found()
{
    header('HTTP/1.0 404 Not Found');
    exit('404 File not found');
}

$alias = isset($_GET['alias']) ? $_GET['alias'] : '';
if (empty($alias)) {
    not_found();
}

define('PUN_ROOT', dirname(__FILE__).'/');
require PUN_ROOT.'include/common.php';

$alias = $db->escape($alias);
$result = $db->query("SELECT a.* FROM {$db_prefix}aliases AS a WHERE a.alias='{$alias}'");
$alias_data = $db->fetch_assoc($result);

if (empty($alias_data['link'])) {
    not_found();
}

// Is post? Read it.
if (preg_match('#viewtopic\.php\?pid=(\d+)#', $alias_data['link'], $matches)) {
    $pid = intval($matches[1]);
    $result = $db->query("SELECT t.subject, p.* FROM {$db_prefix}posts AS p INNER JOIN {$db_prefix}topics AS t ON p.topic_id=t.id WHERE p.id={$pid}");
    $post_data = $db->fetch_assoc($result);

// Is topic? Read it's first post.
} elseif (preg_match('#viewtopic\.php\?id=(\d+)#', $alias_data['link'], $matches)) {
    $tid = intval($matches[1]);
    $result = $db->query("SELECT t.subject, p.* FROM {$db_prefix}topics AS t INNER JOIN {$db_prefix}posts AS p ON t.first_post_id=p.id WHERE t.id={$tid}");
    $post_data = $db->fetch_assoc($result);

// Otherwise just redirect to link.
} else {
    header('Location: ' . $alias_data['link']);
    exit;
}

if (empty($post_data['message'])) {
    not_found();
}

require PUN_ROOT.'include/parser.php';

$self_url = $_SERVER['REQUEST_URI'];
$subject = pun_htmlspecialchars($post_data['subject']);
$message = parse_message($post_data['message'], $post_data['hide_smilies']);
$tpl_file = $alias_data['template'];

$page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $subject);
define('PUN_ALLOW_INDEX', 1);
define('PUN_ACTIVE_PAGE', 'index');
require PUN_ROOT.'header.php';

?>
<div class="linkst">
    <div class="inbox crumbsplus">
        <ul class="crumbs">
            <li><a href="<?php echo $self_url ?>"><strong><?php echo $subject ?></strong></a></li>
        </ul>
        <div class="clearer"></div>
    </div>
</div>

<div class="box">
    <div class="inbox">
        <div class="postmsg">
            <?php echo $message ?>
        </div>
    </div>
</div>
<?php

require PUN_ROOT.'footer.php';

Чтобы всё закрутилось, нам понадобится создать таблицу алиасов и ввести в нее хотябы одну пару для проверки. Можно это сделать в phpmyadmin или в любом другом менеджере БД. На своем тестовом серваке я ввел такую пару:

  alias: about.html
  link: http_://mysite.loc/forum/viewtopic.php?pid=1#p1

т.е. я просто скопировал URL первой тестовой записи, которая появляется после установки форума.

Результат

(адрес http_://mysite.loc/forum/about.html):
pagee.png

Обратите внимание на поле template в таблице и на строку
$tpl_file = $alias_data['template'];
в обработчике. Я оставил возможность задавать свой не-дефолтовый шаблон вывода. Чтобы это работало надо понадобится внести правку в файл header.php. Найдем там первое упоминание $tpl_file и добавим своё условие:

if (empty($tpl_file)) {
    if (defined('PUN_ADMIN_CONSOLE'))
        $tpl_file = 'admin.tpl';
    else if (defined('PUN_HELP'))
        $tpl_file = 'help.tpl';
    else
        $tpl_file = 'main.tpl';
}

Вот в целом портал готов! Не хватает только удобного плагина для прописывания пар алиас-страница. Чтобы не лазить в phpmyadmin. Это я напишу как-нибудь позже.

2015-12-10 09:26:28 artoodetoo пишет:

Раньше тема называлась "Портал от artoodetoo". P.S. Очень жаль, что (_image_shack_) скурвился и картинки потеряны.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#2 2011-06-09 08:19:57

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: FluxBB with mods от artoodetoo

Крутотень!

Offline

#3 2011-06-09 08:27:46

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: FluxBB with mods от artoodetoo

Сделал плагин для добавления связок алиас->страница

pluginw.png

Скачать с файлообменника: ссылка не актуальнасм. ниже
Таблицу придется создавать вручную, никакого инсталятора я не делал.

Прошу тестить!

Edited: залил версию посвежее с English + Russian языками. Инструкция только по английски. Нафиг вам инструкция, я всё уже описал в этой теме smile


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#4 2011-06-11 05:32:50

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: FluxBB with mods от artoodetoo

Полный дистрибутив с инсталятором

Немного усовершенствовал плагин, добавил создание таблицы связей в install и db_update.
Инсталятор добавляет в главное меню пункт About -- это "страничка из сообщения". Для таких страниц инсталятор создает отдельную доску с правами только у модераторов.

Еще фишка: шаблон 2col.tpl с левым сайдбаром. В include/user/sidebar.php вы можете поместить любой текст/код какой вам нужен.

pagesx.png

Скачать дистрибутив с ссылка не актуальнасм. ниже
(обновлено 2011-06-11 15:56 MSK)


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#5 2011-06-11 06:25:05

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: FluxBB with mods от artoodetoo

Если надо сайдбар поместить справа, создаем копируем шаблон 2col.tpl в 2col-r.tpl.
В новом шаблоне меняем название класса "block2col" на "block2colr".
В стилях  находим секцию Profile / Admin, добавляем туда новый класс с правой колонкой. Для примера Air.css:

.pun .block2col .blockmenu {
    width: 13em;
    float: left;
    padding-bottom: 12px;
}

.pun .block2colr .blockmenu {
    width: 13em;
    float: right;
    padding-bottom: 12px;
}

.pun .block2col .blockform, .pun .block2col .block {
    margin-left: 15em;
}

.pun .block2colr .blockform, .pun .block2colr .block {
    margin-right: 15em;
}

Теперь если в плагине указать для странички шаблон 2col-r.tpl, она будет иметь правую колонку.

portalpage.png

Edited: в архив в предыдущем посте я поместил несколько шаблонов для двухколоночной верстки. Также добавил include/portal.php - здесь добыча инфы типа "посление сообщения" для сайдбара.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#6 2011-06-12 18:34:08

Luca
Участник
Зарегистрирован: 2009-10-08
Сообщений: 164

Re: FluxBB with mods от artoodetoo

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

Offline

#7 2011-06-12 22:22:11

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: FluxBB with mods от artoodetoo

@Luca, да. для тех случаев когда форум это почти все, что нужно. но хочется чуть-чуть добавить big_smile
см. рабочий пример: http://nf74.ru/index.html


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#8 2011-06-13 13:37:35

Freeman
Участник
Из Санкт-Петербург
Зарегистрирован: 2010-07-31
Сообщений: 128
Сайт

Re: FluxBB with mods от artoodetoo

Потрясающе!

Offline

#9 2012-03-27 05:22:56

Вадим
Участник
Зарегистрирован: 2012-03-26
Сообщений: 1

Re: FluxBB with mods от artoodetoo

@artoodetoo,  Спасибо за труд! wink почитаем=)

Offline

#10 2012-03-29 13:55:56

fmit
Участник
Зарегистрирован: 2011-11-10
Сообщений: 18

Re: FluxBB with mods от artoodetoo

@artoodetoo, Можешь еще раз добавить "Полный дистрибутив с инсталятором" ?

Offline

#11 2012-03-30 08:01:51

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: FluxBB with mods от artoodetoo

Видимо дистрибутив надо уже с актуальной версией fluxbb? Ok, это займет некоторое время.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#12 2012-03-30 10:31:20

fmit
Участник
Зарегистрирован: 2011-11-10
Сообщений: 18

Re: FluxBB with mods от artoodetoo

я пока на 1.4.7

Offline

#13 2012-03-30 17:33:28

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: FluxBB with mods от artoodetoo

не повезло ))) у меня нет старого архива


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#14 2012-04-02 08:40:26

fmit
Участник
Зарегистрирован: 2011-11-10
Сообщений: 18

Re: FluxBB with mods от artoodetoo

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

Offline

#15 2012-04-03 07:08:10

fmit
Участник
Зарегистрирован: 2011-11-10
Сообщений: 18

Re: FluxBB with mods от artoodetoo

@ artoodetoo: а есть дистрибутив 1.4.8 со уже встроенным порталом?

Offline

#16 2012-04-03 12:45:03

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: FluxBB with mods от artoodetoo

я вчера начал двигаться в этом направлении ))) подогнал перевод под 1.4.8. следующий шаг будет накатываение моих модов. в т.ч. портал

2012-04-03 12:46:01 artoodetoo пишет:

счастье есть!


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#17 2012-04-03 15:52:48

fmit
Участник
Зарегистрирован: 2011-11-10
Сообщений: 18

Re: FluxBB with mods от artoodetoo

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

Offline

#18 2012-04-08 21:58:51

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: FluxBB with mods от artoodetoo

Готова новая версия Портала. Я создал ветку v1.4.8-with-mods, пока из модов и плагинов там только портальные расширения. Остальное накачу постепенно. Итак, ревизия 67 это

* актуальная версия 1.4.8
* русский перевод
* портал + генерация превью

идите по ссылке выше и находите внизу страницы ссылку Zip Archive - полный дистрибутив. Таблица pages включена в install и db_update. При установке форума с нуля ничего колдовать не надо.
Если у вас уже установлен 1.4.8, то db_update не поймет чего не хватает.  Подсказываю трюк: зайдите через PMA в таблицу config и уменьшите номер ревизии базы, тогда db_update начнет работать.

полный список изменений rev.67 по сравнению с "русской сборкой"

Пришлось немного править стили. Старые стили а-ля Oxygen просто удалил чтобы не заморачиваться. Кому нужно это г* мамонта?

Что дальше — добавлю моды что были в сборке 1.4.5.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#19 2012-04-08 22:36:13

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: FluxBB with mods от artoodetoo

Проще всего страничку создать по ссылке в соощении

pages1.png

откроется страница плагина, где можно задать алиас и шаблон

pages2.png

сама страница тоже имеет полезные ссылки

pages3.png

Конечно ссылки присутствуют только если достаточно прав. Еще новшество: если страница сделана на базе темы форума, то каждое сообщение темы будет как страница статьи, (см. нижнюю картинку).

Права сейчас определяются просто: если плагин имеет имя AP_Pages.php, значит с ним могут работать только админы, если AMP_Pages.php, то админы и модераторы. Кому доступно, тот и видит нужные ссылки.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#20 2012-04-10 07:40:23

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: FluxBB with mods от artoodetoo

up!
Я не понял! Нет, ну конечно fluxbb не так популярен, как WordPress, но чтобы вообще никакого фидбэка, это удручает.
Пробовали портал? Что понравилось, что нет, чего не хватает — пишите!


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#21 2012-04-14 08:45:24

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: FluxBB with mods от artoodetoo

Для портала пишу файловую свалку.
Интересует ваше мнение — что можно улучшить и как можно взломать предложенную схему.

Задача:
Отдавать файлы только имеющим право. Нет цели повторить rapidshare или типа того. Саму отдачу надо переложить на сервер, а не прокачивать через скрипт. То есть ссылки оформляю на скрипт в виде download.php?id=###, он проверяет права и если все ок, редиректит на "секретную ссылку" реальной отдачи. Решение должно быть переносимым, т.к. портал будет ставиться много куда и нельзя требовать слишком многого от хостинга.
Вариант с созданием симлинков отпадает, настройки в httpd.conf тоже. Должно работать на серверах Apache с mod_rewrite, в т.ч. и на Windows (например Денвер).

Рабочая идея:
Секретная ссылка содержит ключ доступа, соответствующий временному файлу-ключу. Временный файл создается скриптом download.php после проверки прав. Этот же скрипт будет удалять просроченные файлы-ключи. Сервер проверяет есть ли нужный ключевой файл и разрешает/не разрешает закачку.

Пусть файлы на отдачу хранятся в реальной папке /upload/, имена как FFFF.ext (имя уникальное синтетическое, ext - реальное расширение файла)
файлы-ключи лежат там же, имена как FFFF-AAAA.acs (расширение "acs" от "access"-доступ)
а секретная ссылка выглядит как
mysite.xx/download/FFFF-AAAA/File.ext
В корне сайта помещаем .htaccess

RewriteEngine on
 
# Allow access via secret link with access key
#                         1.prefix         2.fileId  3.accessId  4.name   5.ext
RewriteCond %{REQUEST_URI} (.*)/download/([0-9a-f]+)-([0-9a-f]+)/(.*?)(\.[0-9a-z]*)?$
RewriteCond %{DOCUMENT_ROOT}%1/upload/%2-%3.acs -f
RewriteRule download/.* upload/%2%5 [L]

Второй RewriteCond проверяет существует ли файл-ключ.

в папке /upload/ будет свой .htaccess

#Deny from All

Options -Indexes

php_flag engine 0

Options -ExecCGI
<Files ~ ".(php*|phtml|pl|py|jsp|asp|htm*|shtml|sh|cgi)">
    ForceType text/plain
</Files>

RewriteEngine on
RewriteCond %{THE_REQUEST} !^(GET|HEAD)\ ([^?]*)/download/
RewriteRule .* - [F,L]

К сожалению Deny from All я не могу включить, т.к. тогда вообще не получается качать из этой папки. Вместо этого я проверяю что ссылка на файл была "правильная", а не прямая. После первого .htaccess %{REQUEST_URI} содержит вместо /download/ уже /upload/, поэтому здесь я тестирую %{THE_REQUEST}, он по прежнему выглядит как "GET /download/FFFF-AAAA/File.ext HTTP..."

Ваши комментарии?


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#22 2012-04-16 16:34:22

hcs
Administrator
Зарегистрирован: 2008-09-05
Сообщений: 85

Re: FluxBB with mods от artoodetoo

Почему отпадает вариант с симлинками, ведь их поддерживают все современные ОС?

Offline

#23 2012-04-16 19:31:35

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: FluxBB with mods от artoodetoo

  • Половина компов в мире работает под Windows XP.

  • Симлинки на Windows  только под NTFS, только начиная с Vista и в PHP-на-Windows поддерживаются начиная с v5.3.

  • а fluxbb совместим с PHP 4.4+

  • я встречал упоминания, что из-за возможности обхода openbase_dir на shared-хостингах запрещают symlink()

Этого достаточно чтобы рассматривать другие варианты кроме симлинков. Хотя они хороши для этой задачи, да.

На developer очень даже может встретиться XP. Или Win7 но с FAT-диском. Не могу же я дать средство и сказать "это будет работать, поверьте! хотя на вашем Денвере|XAMPP оно скорее всего заглючит". Поэтому вот так.

А как было бы прекрасно, если бы мы знали, что Apache работает за прокси nginx. Там можно просто вернуть правильный заголовок и будет отдаваться указанный файл уже средствами nginx — без лишних редиректов!

Лично для себя можно писать как угодно, настраивать сервер под задачу, но в public domain продуктах придется быть скромнее.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#24 2013-02-01 05:33:22

11111
Участник
Зарегистрирован: 2011-07-13
Сообщений: 1

Re: FluxBB with mods от artoodetoo

Портал просто огонь!! Автор подскажи пожалуйста можно ли на версии 1.5.2, воспользовавшись первым постом, поднять такой портал? Это прям то что я искал в течении трех месяцев.

Offline

#25 2013-02-06 10:13:39

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: FluxBB with mods от artoodetoo

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


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

Подвал доски

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