Перейти к контенту

Название темы вместо линка


Рекомендуемые сообщения

Хочу как тут :D Что бы линки на темы преобразовывались в название темы в кот. линк ведет...

 

То есть вместо

 

http://www.ibresоurce.ru/forums/index.php?act=ST&f=8&t=4749 (линк битый, ;) )

 

это:

Название темы вместо линка

Ссылка на комментарий
Поделиться на других сайтах

У меня разметка используется своя, там я использую такую фишку, думаю, переделать будет не трудно:

 

<?
    function lcml_forum_topics($txt)
    {
        $txt=preg_replace("!(\s|^)http://(www\.)?airbase\.ru/forums/!m","$1http://forums.airbase.ru/",$txt);
        $txt=preg_replace("!http://forums\.airbase\.ru/index\.php\?!","http://forums.airbase.ru/?",$txt);

        
        $txt=preg_replace("!(\s|^|\()http://forums\.airbase\.ru/\?act=ST&f=(\d+)&t=(\d+)&st=(\d+)(\s|$|\.|,|\))!me","'$1'.lcml_forum_topics_page('$2','$3','$4').'$5'",$txt);
        $txt=preg_replace("!(\s|^|\()http://forums\.airbase\.ru/\?showtopic=(\d+)&st=(\d+)(\s|$|\.|,|\))!me","'$1'.lcml_forum_topics_page('','$2','$3').'$4'",$txt);

        $txt=preg_replace("!http://forums\.airbase\.ru/\?act=ST&f=\d+&t=(\d+)!","http://forums.airbase.ru/index.php?showtopic=$1",$txt);
        
        $txt=preg_replace("!(\s|^|\()http://forums\.airbase\.ru/\?showtopic=(\d+)(\s|$|\.|,|\))!me","'$1'.lcml_forum_topics_title('$2').'$3'",$txt);
        $txt=preg_replace("!(\s|^|\()http://forums\.airbase\.ru/\?showtopic=(\d+)&view=findpost&p=(\d+)(\s|$|\.|,|\))!me","'$1'.lcml_forum_topics_post('$2','$3').'$4'",$txt);

        return $txt;
    }

    function lcml_forum_topics_title($topic)
    {
        $dbh = @mysql_connect("localhost", "login", "password") or die ("Could not connect");
        mysql_select_db("FORUM") or die ("Could not select database");

        $url="http://forums.airbase.ru/index.php?showtopic=$topic";
        $q="SELECT title FROM ib_topics WHERE tid=$topic";
        $query = mysql_query ($q) or  die ("Query '$q' failed, error ".mysql_errno().": ".mysql_error()."<BR>");
        $res = mysql_fetch_array($query);
        
        mysql_close();

        if($res['title'])
            $title=chop($res['title']);
        else
            $title=$url;
        
        return "<a href=\"$url\">$title</a>";
    }

    function lcml_forum_topics_post($topic,$post)
    {
        $dbh = @mysql_connect("localhost", "login", "password") or die ("Could not connect");
        mysql_select_db("FORUM") or die ("Could not select database");

        $q="SELECT t.title,t.tid,p.author_name,p.post_date FROM ib_posts p LEFT JOIN ib_topics t ON (t.tid=p.topic_id) WHERE p.pid=$post";
        $query = mysql_query ($q) or  die ("Query '$q' failed, error ".mysql_errno().": ".mysql_error()."<BR>");
        $res = mysql_fetch_array($query);
        
        mysql_close();

        $url="http://forums.airbase.ru/index.php?showtopic=$topic&view=findpost&p=$post";

        if($res['title'])
            $title=chop($res['title'])." <font size=\"1\">(".$res['author_name'].", ".strftime("%d.%m.%y %H:%M",$res['post_date']).")</font>";
        else
            $title=$url;
        
        return "<a href=\"$url\">$title</a>";
    }

    function lcml_forum_topics_page($forum,$topic,$start)
    {
        $dbh = @mysql_connect("localhost", "login", "password") or die ("Could not connect");
        mysql_select_db("FORUM") or die ("Could not select database");

        if($forum)
            $url="http://www.airbase.ru/forums/index.php?act=ST&f=$forum&t=$topic&st=$start";
        else
            $url="http://forums.airbase.ru/index.php?showtopic=$topic&st=$start";
        $q="SELECT title FROM ib_topics WHERE tid=$topic";
        $query = mysql_query ($q) or  die ("Query '$q' failed, error ".mysql_errno().": ".mysql_error()."<BR>");
        $res = mysql_fetch_array($query);
        
        mysql_close();

        if($res['title'])
        {
            $title=chop($res['title']);
            if($start>0)
                $title.=" <font size=\"1\">(page ".(intval($start/15)+1).")</font>";
        }
        else
            $title=$url;
        
        return "<a href=\"$url\">$title</a>";
    }
?>

 

Т.е. понимает все основные ссылки, прописывает их или как название топика, или как название топика с номером страницы, или как название топика с автором и временем постинга.

Ссылка на комментарий
Поделиться на других сайтах

>Эээ, спассибо но куда это вставить?

 

Я же говорю, у меня свой движок BB-тэгов. Это не iBF-хак.

Если отбросить сложности в виде сохранения исходного сообщения, что позволяет не пользоваться декомпиляцией, то можно приблизительно так сделать.

 

1. Записать мой фрагмент в файл, скажем, lcml.php

 

2. найти в sources/lib/post_parser.php строки

        //--------------------------------------
        // convert <br> to \n
        //--------------------------------------

        $txt = preg_replace( "/<br>|<br \/>/", "\n", $txt );

 

3. Добавить после них:

        include_once("/path_to_you_file/lcml.php");
        $txt=lcml_forum_topics($txt);

 

По идее должно работать, если я не тормознул в этой "адаптации".

 

Правда, после декомпиляции (на редактировании) увидишь не исходный текст, а что-то типа ...

Добавлено в [mergetime]1079711604[/mergetime]

Да, вдогонку. В базе по умолчанию, конечно, нужно в именах таблицы ib_* на ibf_* переделать. А ещё лучше потом соптимизировать на использование уже открытого коннекта к базе данных (просто у меня этот код и из других мест вызывается, не только с форума).

Ссылка на комментарий
Поделиться на других сайтах

Warning: convert(/lcml.php): failed to open stream: No such file or directory in d:\home\localhost\www\forum\sources\lib\post_parser.php on line 154

Warning: convert(): Failed opening '/lcml.php' for inclusion (include_path='.;c:\php4\pear') in d:\home\localhost\www\forum\sources\lib\post_parser.php on line 154

Fatal error: Call to undefined function: lcml_forum_topics() in d:\home\localhost\www\forum\sources\lib\post_parser.php on line 155

 

ps. фалй lcml.php лежит в корневой папки форума...

Ссылка на комментарий
Поделиться на других сайтах

Ну, тебе ж чётко описали, что "Failed opening '/lcml.php' for inclusion". С маршрутом что-то намудрил. Напомню, что в include() прописывается физический путь (абсолютный или относительный), а не URL.

 

Кидай в тот же каталог, где post_parser.php и пиши без всякого пути include("lcml.php");

Ссылка на комментарий
Поделиться на других сайтах

>а в .htaccess ничего нет чтоли?

 

Так ничего и не надо :D

 

>Все, ошибки нет, но линк не преобразовываеться

 

Адрес сайта forums.airbase.ru на свой корректно поменял? ;)

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.