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

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


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

Хочу как тут :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 недели спустя...

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

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

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

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