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


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


Joined: 06 Jan 2005
Show/Hide

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

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

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

#
#--- [AFTER, ADD] ------------------
#
        //[begin] Url to Link name by Porutchik http://forum.aeroion.ru/viewtopic.php?t=309
        global $phpEx, $db;
        $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;
        
        $matches0 = array();

        $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 . ' ', $matches0[]);

        $viewtopic_url = preg_quote($board_path) . '(topic|post)([0-9]+)(-([0-9]+))?\.html';
        preg_match_all('#(^|[\n\t (>.])(' . $viewtopic_url . ')([\w\#$%&~\-;:=,?@\[\]+]*)#si', ' ' . $message . ' ', $matches0[]);

        $viewtopic_url = preg_quote($board_path . 'show_post.' . $phpEx . '?', '/') . '(' . POST_POST_URL . ')=';
        preg_match_all('/(^|[\n\t (>.])(' . $viewtopic_url . ')([0-9]+)([\w\#$%&~\-;:=,?@\[\]+]*)/si', ' ' . $message . ' ', $matches0[]);

        foreach ($matches0 as $matches) 
        {
            foreach ($matches[0] as $k => $str) 
            {
                $topic_post_id = $matches[4][$k];
                $topic_title = '';
                if (in_array($matches[3][$k], array('topic', POST_TOPIC_URL)))
                {
                    $sql = 'SELECT topic_title, "" AS post_subject
                        FROM ' . TOPICS_TABLE . '
                        WHERE topic_id = "' . (int) $topic_post_id . '"';
                }
                else if (in_array($matches[3][$k], array('post', POST_POST_URL)))
                {
                    $sql = 'SELECT t.topic_title AS topic_title, pt.post_subject AS post_subject
                        FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . ' p, ' . POSTS_TEXT_TABLE . ' pt
                        WHERE p.topic_id = t.topic_id
                        AND pt.post_id = p.post_id
                        AND p.post_id = "' . (int) $topic_post_id . '"';
                }
                if ($result = $db->sql_query($sql))
                {
                    $row = $db->sql_fetchrow($result);
                    $topic_title = (!empty($row['post_subject'])) ? $row['post_subject']: $row['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);
                    // Remove padding
                    $message = substr($message, 1);
                }
            }
        }
        //[end]  Url to Link name by Porutchik http://forum.aeroion.ru/viewtopic.php?t=309


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

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype 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 This post has 1 review(s) View user's profile Visit poster's website Skype Name
Sergey Gender:Male


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


Joined: 06 Jan 2005
Show/Hide

Post Fri 27 Aug, 2010 00:53 Download Post Reputation: 88
 Wiki Url to Link Name
Преобразование ссылок на вики-ресурсы (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/viewtopic.php?t=309
        $wiki_urls = array(
            '(^|[\n\t (>.])(http[s]?\:\/\/(wiki)\.phpbb\.com',        //$phpbbwiki_url
            '(^|[\n\t (>.])(http[s]?\:\/\/(wiki)\.phpbbguru\.net',    //$phpbbwiki_url
            '(^|[\n\t (>.])(http[s]?\:\/\/(\S+)\.wikipedia\.org',    //$wikipedia_url
            '(^|[\n\t (>.])(http[s]?\:\/\/(\S+)\.wikiquote\.org',    //$wikiquote_url
            '(^|[\n\t (>.])(http[s]?\:\/\/(\S+)\.wikibooks\.org',    //$wikibooks_url
            '(^|[\n\t (>.])(http[s]?\:\/\/(www\.)*sportswiki\.ru',    //$sportswiki
            '(^|[\n\t (>.])(http[s]?\:\/\/(www\.)*lurkmore\.ru',    //$lurkmore
            '(^|[\n\t (>.])(http[s]?\:\/\/(www\.)*lurkmore\.to',    //$lurkmore
            '(^|[\n\t (>.])(http[s]?\:\/\/(www\.)*lurkmo\.re',    //$lurkmore
        );
                
        $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,4}/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/viewtopic.php?t=309 


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

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype 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 Visit poster's website Skype Name
Siava Gender:Male

Партнер


Joined: 25 Dec 2005
Show/Hide

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
Show/Hide

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

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype 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 Visit poster's website Skype Name
Siava Gender:Male

Партнер


Joined: 25 Dec 2005
Show/Hide

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

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

Участник


Joined: 09 Aug 2009
Show/Hide

Бага, скобка закрытия тега перемещается при таком варианте.
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
Show/Hide

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

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype 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 Visit poster's website Skype Name
core

Участник


Joined: 09 Aug 2009
Show/Hide

Правила для всего форума - ЧИТАТЬ ВСЕМ
Как спастись от радиоволн?

Если две ссылки в сообщении, вторая не преобразуется.

 !  Sergey @ Sat 29 Nov, 2014 18:05:
Теперь преобразуются все
Back to topOffline View user's profile
Sergey Gender:Male


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


Joined: 06 Jan 2005
Show/Hide

Вы его у себя на форуме применяете?

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype 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 Visit poster's website Skype Name
core

Участник


Joined: 09 Aug 2009
Show/Hide

На локали. Просто заметил и написал.
Back to topOffline View user's profile
Display posts from previous:   

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


Similar Topics
Topic Author Forum Replies Last Post
No new posts [RC] Simple Url To Link name before posting for phpBB3 Olympus
преобразование локальных адресов в ссылки с названиями при отправке сообщения
Наименование модификации: Simple Url To Link Name before posting Описание: Перед отправкой/предварительном просмотре сообщения преобразует простые внутренние адреса тем, форумов, профилей пользователей в ссылки с
Sergey Поддержка и моды для phpBB3 136 Sat 13 Feb, 2016 14:24 View latest post
Sergey
No new posts Мод Quote Post in email for phpBB2
цитирование текста сообщения при отправке письма
Название мода: Quote Post in email for phpBB2 Описание мода: При отправке письма со страницы просмотра темы позволяет вставить текст сообщения в виде цитаты с указанием автора, заголовка, адреса сообщения. Если заголовок
Sergey Поддержка и моды для phpBB2 0 Mon 19 Aug, 2013 20:59 View latest post
Sergey
No new posts [RC] Adds a link or info to copied text for phpBB3 (Добавление ссылки на источник при копиро...
Наименование модификации: Adds a link or info to copied text for phpBB3 Описание: Позволяет добавить ссылку на источник информации или копирайт при копировании текста в буфер обмена без использования jQuery. This MOD
Sergey Поддержка и моды для phpBB3 8 Tue 14 Oct, 2014 21:35 View latest post
АлексейМ
No new posts Мод Quote Post in Private Message for phpBB2
цитирование текста сообщения при создании личного сообщения
Название мода: Quote Post in Private Message for phpBB2 Описание мода: При создании личного сообщения со страницы просмотра темы позволяет вставить текст сообщения в виде цитаты с указанием автора, заголовка, адреса
Sergey Поддержка и моды для phpBB2 4 Sat 12 Dec, 2015 21:52 View latest post
Sergey
No new posts Удаление цитаты из цитируемого сообщения и вставка ссылки
Возник вопрос, как при цитировании поста для обычных пользователей вставлять только ссылку на цитируемое сообщение, но сам текст не вставлять? Для модераторов можно оставить обычную цитату с ссылкой. Нужно, чтобы
Владимир1971 Поддержка и моды для phpBB3 1 Sun 25 Aug, 2013 20:01 View latest post
Sergey






All times are UTC + 3 hours
Users browsing this topic:
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
/a
Username:

Password:

Log me on automatically each visit
  Яндекс.Метрика
CrackerTracker © 2004 - 2018 CBACK.de