Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Данный мод позволяет менять обычные ссылки на темы в форуме на читабельные.
К примеру, пишем вот такой линк - http://punbb.ru/viewtopic.php?id=160
После отправки сообщения мод сконвертирует его в линк вот такого вида Reputation mod 2.0.1
Мод работает с линками на темы, форумы и профили.
Установка предельно проста:
1. открываем /include/function.php
2. ищем самую последнюю строку и после нее добавляем это:
///hcs friendly url replacment function
function convert_forum_url(&$text)
{
global $db, $pun_config;
function replace($query, $pattern, $text) {
global $db;
if (preg_match_all($pattern, $text, $regs, PREG_SET_ORDER)) {
foreach ($regs as $pid) {
$result = $db->query($query.$pid[1]) or error('Unable execute query for convert url\'s', __FILE__, __LINE__, $db->error());
if ($result) {
$subject = $db->result($result);
$pattern = "/(?<=^|\s)".str_replace("/", "\/", str_replace("?", "\?", str_replace(".", "\.", $pid[0])))."\b/";
$text=preg_replace ($pattern, "[url=.$pid[0].]".$subject."[/url]", $text,1);
}
}
}
return $text;
}
// Convert viewtopic
$url = str_replace("/", "\/", str_replace(".", "\.", $pun_config['o_base_url']."/viewtopic.php\?"));
$pattern = "/(?<=^|\s)".$url."pid=([0-9]+)#p[0-9]+\b/";
$query='SELECT t.subject FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON t.id = p.topic_id WHERE p.id=';
$text = replace($query, $pattern, $text);
$pattern = "/(?<=^|\s)".$url."id=([0-9]+)\b/";
$query='SELECT subject FROM '.$db->prefix.'topics WHERE id=';
$text = replace($query, $pattern, $text);
// Convert profile
$url = str_replace("/", "\/", str_replace(".", "\.", $pun_config['o_base_url']."/profile.php\?"));
$pattern = "/(?<=^|\s)".$url."id=([0-9]+)\b/";
$query='SELECT username FROM '.$db->prefix.'users WHERE id=';
$text = replace($query, $pattern, $text);
// Convert viewforum
$url = str_replace("/", "\/", str_replace(".", "\.", $pun_config['o_base_url']."/viewforum.php\?"));
$pattern = "/(?<=^|\s)".$url."id=([0-9]+)\b/";
$query='SELECT forum_name FROM '.$db->prefix.'forums WHERE id=';
$text = replace($query, $pattern, $text);
}
3. открываем post.php
4. находим строку ~158
// Validate BBCode syntax
5. добавляем перед этим:
// MOD CONVENIENT FORUM URL BEGIN
convert_forum_url($message);
// MOD CONVENIENT FORUM URL END
вуаля.
код в стадии тестирования.
Редактировался hcs (2007-03-21 05:24:24)
Ну что могу сказать? Спасибо тебе хороший человек
Хороший мод, только вот сегодня решил урлы поменять, и чтобы не накосячить, обращаюсь за помощью.
forum1.html форум
forum1-2.html форум 2 страница
topic1.html топик
topic1-2.html топик 2 страница
topic1-all.html топик весь
p1.html#p1 пост
Как внедрить? Да, ещё хотел узнать, в базу в каком виде ложится ссылка? В обычном, или она конвертируется "на лету"?
в базу ложится обрамленная бб-кодом [url], т.е. конвертируется один раз при отправке поста.
Мод работает только с топиками, поэтому править имеет смысл только для :
topic1.html топик
topic1-2.html топик 2 страница
topic1-all.html топик весь
что значит вторая страница? есть еще и 3 и 4?
Судя по требованиям надо править регексп. Правка достаточно серъёзная. На вскидку не могу ничего предложить.
вставил всё... а как оно рабоатет не врубаюсь? где же чпу?
это не чпу. этот мод конвертирует внутренние ссылки (ссылки на сообщения и на темы на локальном форуме) при отправке сообщения в бб-код с названием темы.
мод чпу совершенно другой мод.
А это и есть Convenient Forum URL's ?
Да. Сначала я назвал его Friendly, потом пошарился по другим форумам, решающим аналогичную задачу, и понял что Friendly в понимании пользователей - совершенно другая функциональность.
понял что Friendly в понимании пользователей - совершенно другая функциональность
Понятно, но слова Convenient в моем понимании вообще нет
Зато в понимании электронных словарей есть
"Convert" было бы понятнее.
Поставил на тестовую сборку форума, текст ссылки меняет на название темы, но ломает саму ссылку. На выходе вместо
http://localhost/forum/viewtopic.php?id=505
имеем
http://.http//localhost/forum/viewtopic.php?id=505.
понравилось. спасибо.
Px
неправильно установил, у меня работает нормально
очень полезный мод — спасибо hcs!
неправильно установил, у меня работает нормально
Вроде всё делал как указано в описании, не заработало. Посмотрел количество таких ссылок у себя на форуме, и плюнул на этот мод...
случайно обнаружил:
что когда постю http//ru55.ru/forum/topic.php?id=726
то получаю
Need HELP - Hyundai Microcat..]Need HELP - Hyundai Microcat.[/url ]
причем ссылка - то что сперва: http://.[ url=.http //rr.aa.z/forum/topic.php?id=736.
поставил 2 пробела чтоб не преобразовывалась
посмотреть можно тут: http://ru55.ru/forum/topic.php?pid=3434#p3434
Добавлено спустя 37 секунд:
привем на hcs - сборке работает. а у меня не хотит. чтото не то.. с Dexus сборкой
Добавлено спустя 1 минуту 4 секунды:
базы вроде одинаковы, что касается запросов в этом куске кода.
Добавлено спустя 4 минуты 24 секунды:
причем что касается постов - работает, а с топиками - нет.
Редактировался niikto (2007-03-10 21:35:39)
кстате обманулся - на hcs - сборке тоже коряво. просто не рвёт имя темы, вставляет:
"Впечатления владельцев о своих машинах, плюсы и минусы" - тоесть длинное имя не рвёт, но ссылка вот такая получается:
_http://.http//forum.aa.z/viewtopic.php?id=2.
тоесть лишнее http://. с точкой на конце... и после слешей
Добавлено спустя 42 минуты 7 секунд:
вот у кого то сверху та же ошибка.. хм..
Добавлено спустя 46 минут 20 секунд:
почему то считаю - дело в этой строчке:
$url = str_replace("/", "\/", str_replace(".", "\.", $pun_config['o_base_url']."/viewtopic.php\?"));
Добавлено спустя 47 минут 8 секунд:
вот в тех штуках: "/", "\/", и "." "\."
Буду прикручивать этот мод сюда, обязательно посмотрю что там за ерунда происходит, заодно оптимизирую, ибо время всегда выявляет недостатки.
да. спасибо. буду ждать
Значит так. Проверил всё, установил на чистый форум - никаких проблем, описанных выше не наблюдаю. Если не трудно, покажите мне ваши битые ссылки вживую.
Обновил этот мод. Теперь он конвертирует не только ссылки на топики, но и на профили и на форумы. Инструкция в первом посте обновлена. При апгрейде обратите внимание на изменение имени функции.
Добавлено спустя 1 час 39 минут 9 секунд:
niikto
дай ссылку на пост где можно посмотреть корявый урл, покажи содержимое o_base_url из таблицы config
По моему ошибка здесь: $text=preg_replace ($pattern, "[url={}.$pid[0].{}]".$subject."[/url]", $text,1);
{} - должны быть двойные кавички,
заменил этими символами так как кавычки в этих местах при публикации пропадают. Это заметно в коде первого поста.
Редактировался Dr.Rom (2007-03-20 23:34:34)
Dr.Rom, точно так! Спасибо что нашёл баг
Вобщем там надо ставить двойные кавычки, бб-код их почему-то вырезает, инструкцию сделаю в виде текстового файла.
с новым кодом сперва та же проблема:
[url=.http://forum.aa.z/viewtopic.php?id=2.]Впечатления владельцев о своих машинах, плюсы и минусы[/url]#p20
добавил такие кавычки {}, но они тож не исчезают!:
[url={}.http://forum.aa.z/viewtopic.php?id=2.{}]Впечатления владельцев о своих машинах, плюсы и минусы[/url]#p20
потом я убрал и {} и точки:
[url=http://forum.aa.z/viewtopic.php?id=2#p25]Впечатления владельцев о своих машинах, плюсы и минусы[/url]
тоесть все путём.. щас буду пробовать использовать этот мод совместно с тем, что преобразует адрес, чтоб не дублировались ссылки на тему и посты.
Добавлено спустя 4 минуты 1 секунду:
такс..
отбрасывает номер поста: #p26
Добавлено спустя 16 минут 28 секунд:
сделал!!!! :
смотрите - в обычном двиге тока 2 вида ссылок:
_http://rr.aa.z/forum/topic.php?pid=3471#p3471 - на пост
и
_http://rr.aa.z/forum/topic.php?id=43 - на топик
когда добавляешь мод, кой убирает ссылки на пост и превращает их в ссылки на топик с якорем на пост, появляется последний вид:
_http://rr.aa.z/forum/topic.php?id=873#p3400
чтобы его тоже превращать - добавтье перед
$pattern = "/(?<=^|\s)".$url."pid=([0-9]+)#p[0-9]+\b/";
вот это:
здесь был неправильный код
и тада тоже они будут превращаться!
а старый вариант - тож не убирайте - потому что когда тока-тока ответил - всеравно адрес в старом стиле.. если кто его скопирует - это будет в старом стиле (без мода dublicate urls)
Добавлено спустя 51 минуту 43 секунды:
ошибся наверное.. хм..
_http://forum.aa.z/viewtopic.php?pid=28#p28 - превращаетс в http://forum.aa.z/viewtopic.php?pid=28#p28
Добавлено спустя 1 час 19 минут 34 секунды:
а ещё думаю можно доделать под дубль-мод и ту реплейсину, что _http://rr.aa.z/forum/topic.php?pid=3471#p3471 - такие ссылки преобразует - пусть уже коглда вставляешь эту ссылку - вставляется правильная: _http://rr.aa.z/forum/topic.php?id=883#p3471
ВСЁ - первую проблему решил!!!
зачем учитывать номер поста иза базы, если нам просто номер темы в урле даётся?
поэтому надо делать так, а сверху = кусок неправильный:
$pattern = "/(?<=^|\s)".$url."id=([0-9]+)#p[0-9]+\b/";
$query='SELECT subject FROM '.$db->prefix.'topics WHERE id=';
$text = replace($query, $pattern, $text);
Добавлено спустя 1 час 29 минут 20 секунд:
вторая проблема тоже решена - причем сразу же! - надо было просто решить первую!!!
HCS добавть пожалуйста этот кусочек в код мода - он мешать не будет, а кто внедрил себе ДУБЛЬ-МОД (ведь штука важная!) Индексация ссылок на пост - у того тоже работать будет!
Редактировался niikto (2007-03-25 03:58:49)
да, в edit.php перед той же строкой надо тоже добавить