Username:
Password:
 Log me on automatically each visit
 
Aeroion.Ru
Форумы сервера Aeroion.Ru
Welcome

Aeroion.Ru Forum Index
  » Технические форумы
   » Поддержка и моды для phpBB2
    » [dev] Url To Link Name for phpBB2
   преобразование адресов в ссылки при отправке сообщения
printer-friendly view
Author[dev] Url To Link Name for phpBB2
Sergey Gender:Male


Местный босс - администратор


Joined: 06 Jan 2005
Location: Оренбург
Posts: 1127
Last Visited: Today at 01:43
Кредиты: 3594
Reputation: 47
Age: 41
Zodiac: Aquarius Pig

Этот пока не оформленный мод преобразует простые адреса топиков форума в ссылки с названиями, то есть адрес темы заключается в тэг bbcode [url=]some title[/url].
Преобразование адресов происходит на этапе записи сообщения в базу.
Идея позаимствована из двига форума www.mista.ru

Code:
#
#--- [OPEN] ------------------
#
includes/functions_post.php

#
#--- [FIND] ------------------
# in function prepare_message
#
    global $board_config, $html_entities_match, $html_entities_replace;

#
#--- [AFTER, ADD] ------------------
#
    //begin added
    global $phpEx, $db;
    //end added

#
#--- [FIND] ------------------
# in function prepare_message
#
        $message = bbencode_first_pass($message, $bbcode_uid);

#
#--- [AFTER, ADD] ------------------
#
        //[begin] Url to Linkname
        $script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path']));
        $script_name = ($script_name != '') ? $script_name . '/' : '';
        $server_name = trim($board_config['server_name']);
        $server_protocol = ($board_config['cookie_secure']) ? 'https://' : 'http://';
        $server_port = ($board_config['server_port'] <> 80) ? ':' . trim($board_config['server_port']) . '/' : '/';
        $board_path = $server_protocol . $server_name . $server_port . $script_name;
        $viewtopic_url = preg_quote($board_path . 'viewtopic.' . $phpEx . '?', '/') . '('. POST_TOPIC_URL . '|'. POST_POST_URL . ')=';
        preg_match_all('/(^|[\n\t (>.])(' . $viewtopic_url . ')([0-9]+)([\w\#$%&~\-;:=,?@\[\]+]*)/si', $message, $matches);
        foreach ($matches[0] as $k => $str)
        {
            $topic_post_id = $matches[4][$k];
            $topic_title = '';
            if ($matches[3][$k] == POST_TOPIC_URL)
            {
                $sql = 'SELECT topic_title
                    FROM ' . TOPICS_TABLE . '
                    WHERE topic_id = ' . (int) $topic_post_id;
            }
            else
            {
                $sql = 'SELECT t.topic_title
                    FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . ' p
                    WHERE p.topic_id = t.topic_id
                    AND p.post_id = ' . (int) $topic_post_id;
            }
            if ($result = $db->sql_query($sql))
            {
                $topic_title = $db->sql_fetchfield('topic_title');
            }
            $db->sql_freeresult($result);
   
            if (!empty($topic_title))
            {
                preg_match('/([,]*)$/', $str, $math);
                $internal_url = preg_replace('/(&amp;)sid=[0-9a-f]{32}/', '', substr($str, strlen($matches[1][$k])));
                $internal_url = preg_replace('/([,]*)$/', '', $internal_url);
                $message = str_replace($str, $matches[1][$k] . '[url=' . trim($internal_url) . ']' . addslashes($topic_title) . '[/url]' . ((isset($math[1])) ? $math[1] : ''), $message);
            }
        }
        //[end] Url to Link name


Мод для скачивания темы

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, слать емайлы, пытаться писать в приват. Спасибо за понимание.
Please do not PM, ICQ or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
Back to topOffline View user's profile Skype Name
Sergey Gender:Male


Местный босс - администратор


Joined: 06 Jan 2005
Location: Оренбург
Posts: 1127
Last Visited: Today at 01:43
Кредиты: 3594
Reputation: 47
Age: 41
Zodiac: Aquarius Pig

Преобразование ссылок на вики-ресурсы (wiki.phpbb.com, ru.wikipedia.org, en.wikipedia.org, wikiquote.org, wikibooks.org)

Code:
#
#--- [OPEN] ------------------
#
includes/functions_post.php

#
#--- [FIND] ------------------
# in function prepare_message
#
        $message = bbencode_first_pass($message, $bbcode_uid);

#
#--- [AFTER, ADD] ------------------
#
        //[begin] Wiki Url to Link Name by Porutchik http://forum.aeroion.ru
        $wiki_urls = array(
            '(^|[\n\t (>.])(http\:\/\/(wiki)\.phpbb\.com',        //$phpbbwiki_url
            '(^|[\n\t (>.])(http\:\/\/(wiki)\.phpbbguru\.net',    //$phpbbwiki_url
            '(^|[\n\t (>.])(http\:\/\/(\S+)\.wikipedia\.org',    //$wikipedia_url
            '(^|[\n\t (>.])(http\:\/\/(\S+)\.wikiquote\.org',    //$wikiquote_url
            '(^|[\n\t (>.])(http\:\/\/(\S+)\.wikibooks\.org',    //$wikibooks_url
            '(^|[\n\t (>.])(http\:\/\/(www\.)*sportswiki\.ru',    //$sportswiki
            '(^|[\n\t (>.])(http\:\/\/(www\.)*lurkmore\.ru',    //$sportswiki
        );
               
        $last_char_patt = '/([\),]*)$/';
        $matches = array();
        foreach ($wiki_urls as $url_pattern)
        {
            preg_match_all('#' . $url_pattern . '(\S*)\/)([\S$+]*)#si', $message, $matches);
            foreach ($matches[0] as $k => $str)
            {
                $topic_title = $matches[5][$k];
                if (!empty($topic_title))
                {
                    if (preg_match('/\%([A-Z0-9]{2})/i', $topic_title))
                    {
                        $topic_title = iconv('utf-8', $lang['ENCODING'], rawurldecode($topic_title));
                    }
                    $wiki_url = substr($str, strlen($matches[1][$k]));
                    if (preg_match($last_char_patt, $str, $math))
                    {
                        $wiki_url = preg_replace($last_char_patt, '', $wiki_url);
                        $topic_title = preg_replace($last_char_patt, '', $topic_title);
                    }
                    $wiki_url = str_replace($topic_title, rawurlencode($topic_title), $wiki_url);
                    $topic_title = str_replace('_', ' ', $topic_title);
                    if ($tok = strtok($topic_title, '#'))
                    {
                        $topic_title = $tok;
                        if ($sec_tok = strtok('#'))
                        {
                            if (preg_match('/\.([A-Z0-9]{2})/i', $sec_tok))
                            {
                                $sec_tok = str_replace('.', '%', $sec_tok);
                            }
                            $topic_title .= ': ' . iconv('utf-8', $lang['ENCODING'], urldecode($sec_tok));
                        }
                    }
                    $message = str_replace($str, $matches[1][$k] . '[url=' . trim($wiki_url) . ']' . addslashes($topic_title) . '[/url]' . ((isset($math[1])) ? $math[1] : ''), $message);
                }
            }
        }
        //[end] Wiki Url to Link Name by Porutchik http://forum.aeroion.ru
 


Примеры:
Phpbb
dashboard.action
Заглавная страница ( Викицитатник )
Викиучебник

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, слать емайлы, пытаться писать в приват. Спасибо за понимание.
Please do not PM, ICQ or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
Back to topOffline View user's profile Skype Name
Siava Gender:Male

Партнер


Joined: 25 Dec 2005
Posts: 37
Last Visited: Wed 04 Jan, 2012 22:42
Кредиты: 464
Reputation: 4
Age: 30
Zodiac: Cancer Cock

Sergey, в моде переменную $topic_title желательно экранировать с помощью addslashes(), так как если в названии темы будет символ ' , то SQL запрос на добавление в таблицу posts_text не выполнится.

То есть:

Code:
$message = str_replace($str, $matches[1][$k] . '[url=' . trim($internal_url) . ']' . $topic_title . '[/url]' . ((isset($math[1])) ? $math[1] : ''), $message); 


заменить на:

Code:
$message = str_replace($str, $matches[1][$k] . '[url=' . trim($internal_url) . ']' . addslashes($topic_title) . '[/url]' . ((isset($math[1])) ? $math[1] : ''), $message); 

_________________
Siava.Ru
Back to topOffline View user's profile Visit poster's website
Sergey Gender:Male


Местный босс - администратор


Joined: 06 Jan 2005
Location: Оренбург
Posts: 1127
Last Visited: Today at 01:43
Кредиты: 3594
Reputation: 47
Age: 41
Zodiac: Aquarius Pig

Точно. Сейчас попробовал: Error in posting. Код в первом и втором посте исправлен.

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, слать емайлы, пытаться писать в приват. Спасибо за понимание.
Please do not PM, ICQ or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
Back to topOffline View user's profile Skype Name
Siava Gender:Male

Партнер


Joined: 25 Dec 2005
Posts: 37
Last Visited: Wed 04 Jan, 2012 22:42
Кредиты: 464
Reputation: 4
Age: 30
Zodiac: Cancer Cock

Sergey, более того, после такого постинга в таблицу post заносятся данные, а в posts_text нет. Поэтому, не забудь скорректировать (удалить лишнюю запись), чтобы в будущем не было проблем с базой.

_________________
Siava.Ru
Back to topOffline View user's profile Visit poster's website
core

Участник


Joined: 09 Aug 2009
Posts: 5
Last Visited: Mon 30 Jan, 2012 21:54
Кредиты: 85
Reputation: 0


Бага, скобка закрытия тега перемещается при таком варианте.
Code:
[quote="Sergey @ 1224084140";p="1119"]
http://forum.aeroion.ru/viewtopic.php?t=201[/quote]

Результат
Code:
[quote="Sergey @ 1224084140";p="1119"]
[url=http://forum.aeroion.ru/viewtopic.php?t=201[]Мод для скачивания темы[/url]/quote]
Back to topOffline View user's profile
Sergey Gender:Male


Местный босс - администратор


Joined: 06 Jan 2005
Location: Оренбург
Posts: 1127
Last Visited: Today at 01:43
Кредиты: 3594
Reputation: 47
Age: 41
Zodiac: Aquarius Pig

Может проще не страдать ерундой? Все варианты предусматривать и фиксить, рук не хватит.

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, слать емайлы, пытаться писать в приват. Спасибо за понимание.
Please do not PM, ICQ or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
Back to topOffline View user's profile Skype Name
Display posts from previous:   

Summary Rating For >> [dev] Url To Link Name for phpBB2
Average Rating: 0.00 :: Min Rating: 0 :: Max Rating: 0 :: Number of Ratings: 0
Choose Rating: 1   2   3   4   5  

Similar Topics
Topic Author Forum Replies Last Post
No new posts Sticky: Локализация (русификация) и FAQ по ph...
Ссылки по Олимпусу, ответы на частоза...
Sergey Поддержка и моды для phpBB3 0 Wed 03 Mar, 2010 23:35 View latest post
Sergey
No new posts Sticky: Mod Advanced db_update generator для ...
Генератор db_update.php с усовершенст...
Sergey Поддержка и моды для phpBB2 17 Sun 30 Jan, 2011 18:03 View latest post
miba
No new posts [RC] Simple Url To Link name before p...
преобразование локальных адресов в сс...
Sergey Поддержка и моды для phpBB3 90 Sun 18 Dec, 2011 03:55 View latest post
Sergey
No new posts Мод Quote Post in Private Message for...
цитирование текста сообщения при созд...
Sergey Поддержка и моды для phpBB2 2 Sat 30 Apr, 2011 15:53 View latest post
Sergey
No new posts Category link at navigation bar vlad77 Архив модов для phpBB 2.0.x 0 Tue 24 Aug, 2010 20:29 View latest post
vlad77




All times are UTC + 3 Hours
All times are synchronized with the forum server time
Users browsing this topic:2 Guests
Registered Users: None

Jump to:   
printer-friendly view
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum