Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Если бы ты толком излагал свою мысль, то тебя было бы проще понять.
Насчет обрезания якоря согласен, регексп чуточку кривоват и код ведет себя немного неправильно, надо такие урлы, которые в оригинальном движке не могут существовать вообще исключать из обработки,буду думать.
А по остальным твоим вопросом моё мнение такое:
Я сделал мод который без проблем ставится на оригинальный punBB и работает так как от него требуется.
Существуют несколько сот модов, меняющих поведение движка произвольно по своему усмотрению, мне прикажете для каждого из них делать изменения в своём? Кроме того я не считаю, что ссылка вида id= &p= #p правильная, потомучто у разных людей могут быть разные количества сообщений на странице и как следствие эти ссылки будут указывать для разных людей в разные места.
Воля каждого администратора оттачивать любые изменения в коде под свои потребности.
hcs что ты? - проблемы то вообще НЕТУ!
смотри: вот что у меня - после дополнения твоего куска кода (тока viewtopic и viewforum заменены на topic и forum):
///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);
// $text=preg_replace ($pattern, "[url={}.$pid[0].{}]".$subject."[/url]", $text,1);
$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']."/topic.php\?"));
// http://rr.aa.z/forum/topic.php?id=873#p3400
$pattern = "/(?<=^|\s)".$url."id=([0-9]+)#p[0-9]+\b/";
$query='SELECT subject FROM '.$db->prefix.'topics WHERE id=';
$text = replace($query, $pattern, $text);
// http://rr.aa.z/forum/topic.php?pid=3471#p3471
$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);
// http://rr.aa.z/forum/topic.php?id=43
$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']."/forum.php\?"));
$pattern = "/(?<=^|\s)".$url."id=([0-9]+)\b/";
$query='SELECT forum_name FROM '.$db->prefix.'forums WHERE id=';
$text = replace($query, $pattern, $text);
}
ВСЁ!
ТАК ВСЁ РАБОТАЕТ!
все ТРИ вида ссылок!
и ничто никому не мешает.
если даже не будет мода дулбь-урлов - всё равно будет работать и на стандартном форуме.
а других кстате модов меняющих дублирование страниц не знаю.
мод-реврайт не считаю
Добавлено спустя 1 минуту 13 секунд:
p.s.: спасибо за замечание- постараюсь после нахождения решения - излагать кратче и понятней
вот в этом посте: "Суперкатегории" видно, что этот мод не умеет работать с модом "Все на одной странице" """
там после конвертации получается: &action=all не при делах.
спасибо, будем посмотреть
Кстати могу предложить продолжение идеи по таким дружественным ссылкам.
Только не уверена что её можно реализовать. теоретически вроде выглядит не сложно. Но точно не уверена.
Смысл заключается в следующем:
Очень часто на форумах даются ссылки на другие сайты. Вот эти-то ссылочки и хорошо бы переделать в их текстовый эквивалент по типу "Friendly URL by hcs".
Теоретически это выглядит так: нужно открыть страницу чужого сайта по данной ссылке, прочитать заголовок этой страницы между тегами <title>Заголовок</title> и подставить этот заголовок вместо ссылки...
Вот что-то типа этого:
$dirname = адрес-ссылки-на-другой-сайт;
$f = "$dirname";
$fc=file($f);
$file=join("", $fc);
if (preg_match("/<title.*>(.*)<\/title.*>/isU", $file, $match))
{
$title = trim($match[1]);
}
echo $title;
Т.е. вроде бы всё получается, единственный вопрос который неизвестен - это переменная "$dirname".
Вот тут что-то у меня не получается, или может быть это вообще не возможно сделать?
Это возможно если пхп имеет разрешение открывать файлы удаленно, т.е. запрашивать страницы со стронних серверов.
Вот пример из справки к пхп:
<?php
$ch = curl_init("http://www.example.com/");
$fp = fopen("example_homepage.txt", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
?>
Для работы в пхп должен быть включен curl
Вот форум обнаружила vBulletin:
http://www.evangelie.ru/forum/t24147.html
Там все ссылки переделываются как я говорила. Надо же... идею спёрли ))))))))))))))
Там все ссылки переделываются как я говорила. Надо же... идею спёрли ))))))))))))))
Идея хорошая, но сильно утопическая Благодаря горе-оптимизаторам сейчас можно такие title встретить, что лучше их не надо вставлять...
почитайте про технологии trackback , pingback. там прочитываются чужие странички с указанных ссылок. все это интересно, но требует дополнительных ресурсов. есть еще проблемы со спамерами. вобщем нафиг нужны эти чужаки!
По моему ошибка здесь: $text=preg_replace ($pattern, "[url={}.$pid[0].{}]".$subject."[/url]", $text,1);
Только сегодня заметил. Исправления работают.