1

Тема: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

Добрый день!

На 1.2 прекрасно работал немного модифицированный Friendly URL by hcs --- дружественные ссылки

На 1.3 искал что-то похожее - не нашел sad

Может, кто-нибудь поможет найти/сделать?

Поделиться

2

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

Может быть сделаю.

Сайт hcs

Поделиться

3

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

А чем в 1.3 недружественные ссылки?

Поделиться

4

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

Да дружественные ссылки, только тот мод делал их еще более дружественными к пользователю. Там в теме раскрыта суть, просто немного неудачное название для мода, вводит в заблуждение.

Сайт hcs

Поделиться

5

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

Сделал решение для anycode
Решение: convert_forum_url
хук №1: po_form_submitted
код хука:

define('FORUM_CONVERT_URL', 1);

хук №2: ps_handle_url_tag_end
код хука:

/*
 *     Convert forum url solution for PunBB 1.3
 *  (c) 2010 hcs 
 * 
 */

// We are not smarter than the user! 
if ( defined( 'FORUM_CONVERT_URL' ) && $full_url == $link ){
    global $base_url, $forum_config, $forum_db, $forum_user, $forum_rewrite_rules;
    // It's own forum!
    if ( strpos($full_url, $base_url) !== false ) {
        static $keys;
        if ( !isset($keys) ) {
            $keys = array();
            if ( isset($forum_rewrite_rules) ) {
                $keys['post'] = str_replace(array('/^', '$/i'),array('/','/i'), array_search('viewtopic.php?pid=$1', $forum_rewrite_rules));
                $keys['topic-forum'] = str_replace(array('/^', '$/i'),array('/','/i'), array_search('view$1.php?id=$2', $forum_rewrite_rules));
                $keys['topic-forum-p'] = str_replace(array('/^', '$/i'),array('/','/i'), array_search('view$1.php?id=$2&p=$4', $forum_rewrite_rules));
                $keys['profile'] = str_replace(array('/^', '$/i',),array('/','/i'), array_search('profile.php?id=$1', $forum_rewrite_rules));
            }
            else {
                $keys['post'] = '/viewtopic\.php\?pid=([0-9]+)/i';
                $keys['topic-forum'] = '/view(forum|topic)\.php\?id=([0-9]+)/i';
                $keys['topic-forum-p'] = '/view(forum|topic)\.php\?id=([0-9]+)&p=([0-9]+)/i';
                $keys['profile'] = '/profile\.php\?id=([0-9]+)/i';
            }
        }
        // Find param (post? topic? forum? profile?)
        foreach ( $keys as $key_name => $rule )
        {
            //     We have a match!
            if ( preg_match($rule, $full_url ,$matches) )
            {
                switch ($key_name) {
                    case 'post':
                        $query = array(
                            'SELECT'    => 'p.topic_id',
                            'FROM'        => 'posts AS p',
                            'WHERE'        => 'p.id='.intval($matches[1])
                        );
                        $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
                        if ($forum_db->num_rows($result)) {
                            $topic_id = $forum_db->result($result);
                            // Fetch some info about the topic
                            $query = array(
                                'SELECT'    => 't.subject',
                                'FROM'        => 'topics AS t',
                                'JOINS'        => array(
                                    array(
                                        'INNER JOIN'    => 'forums AS f',
                                        'ON'            => 'f.id=t.forum_id'
                                    ),
                                    array(
                                        'LEFT JOIN'        => 'forum_perms AS fp',
                                        'ON'            => '(fp.forum_id=f.id AND fp.group_id='.$forum_user['g_id'].')'
                                    )
                                ),
                                'WHERE'        => '(fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.$topic_id.' AND t.moved_to IS NULL'
                            );
                            $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
                            if ($forum_db->num_rows($result))
                                $link  = forum_htmlencode($forum_db->result($result));
                        }
                        break;
                    case 'topic-forum':
                    case 'topic-forum-p':
                        if ($matches[1] == 'topic'){
                            // Fetch some info about the topic
                            $query = array(
                                'SELECT'    => 't.subject',
                                'FROM'        => 'topics AS t',
                                'JOINS'        => array(
                                    array(
                                        'INNER JOIN'    => 'forums AS f',
                                        'ON'            => 'f.id=t.forum_id'
                                    ),
                                    array(
                                        'LEFT JOIN'        => 'forum_perms AS fp',
                                        'ON'            => '(fp.forum_id=f.id AND fp.group_id='.$forum_user['g_id'].')'
                                    )
                                ),
                                'WHERE'        => '(fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.intval($matches[2]).' AND t.moved_to IS NULL'
                            );
                        }
                        elseif($matches[1] == 'forum'){
                            // Fetch some info about the forum
                            $query = array(
                                'SELECT'    => 'f.forum_name',
                                'FROM'        => 'forums AS f',
                                'JOINS'        => array(
                                    array(
                                        'LEFT JOIN'        => 'forum_perms AS fp',
                                        'ON'            => '(fp.forum_id=f.id AND fp.group_id='.$forum_user['g_id'].')'
                                    )
                                ),
                                'WHERE'        => '(fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.intval($matches[2])
                            );
                        }
                        $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
                        if ($forum_db->num_rows($result))
                            $link  = forum_htmlencode($forum_db->result($result));
                        break;
                    case 'profile':
                        // Fetch info about the user whose profile we're viewing
                        $query = array(
                            'SELECT'    => 'u.username',
                            'FROM'        => 'users AS u',
                            'WHERE'        => 'u.id='.intval($matches[1])
                        );
                        $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
                        if ($forum_db->num_rows($result))
                            $link  = forum_htmlencode($forum_db->result($result));
                    break;
                }
            }
        }
    }
}

Добавлено спустя 1 минуту 25 секунд:

Если будет работать без ошибок, оформлю в расширение.

Сайт hcs

Поделиться

6

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

hcs, при работающем расширении YonasH'a <show_links_blank> решение convert_forum_url не работает - пришлось отключить расширение ради такого хорошого решения... smile

Добавлено спустя 28 минут 20 секунд:

Да, хотелось бы наверное соохранить возможность "насильний" прописи названий ссылок... То есть сохранить вариант

[url=<ссылка_внутри_форума>]<текст> или <ссылка_внутри_форума>[/url]
"The only thing neccesary for the triumph of evil is for good men to do nothing..." (c)

Поделиться

7

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

Я не понял по второму пункту. Что имеется в виду? Сейчас если ссылка и текст ссылки одинаковы, то только тогда происходит преобразование, как правило это тот случай, когда ссылка кидается в текстовое сообщение без всяких бб кодов.
С show_links_blank посмотрим что за конфликт.

Сайт hcs

Поделиться

8

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

По конфликту с show_links_blank я думаю, что если оформить в расширение и задать хуку ps_handle_url_tag_end приоритет повыше, то проблема рассосется.
Кстати,я что-то не понял с этим show_links_blank, оно тупо все линки делает blank,не зависимо от того на внешний ресурс линк или внутряк?

Сайт hcs

Поделиться

9

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

1. Если в форму ответа добавить просто текстом ссылку вида

http://forum/viewtopic.php?id=7601

то все нормально работает.
2. Если в форму ответа добавить ссылку, а затем ее обернуть в {url} т.е.

[url]http://forum/viewtopic.php?id=7601[/url]

то не преобразовывает.
3. При редактировании не работают оба варианта

Поделиться

10

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

2. Будем смотреть.
3. Редактирование не реализовано. Надо ли?

Сайт hcs

Поделиться

11

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

hcs пишет:

3. Редактирование не реализовано. Надо ли?

Очень. На 1.2 я переделал, чтобы и на редактировании работало. Теперь , после переезда на 1.3, все только и плачутся - "когда вернут преобразование ссылок ? mad "

Поделиться

12

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

мда с show_links_blank  не работает я правда http://punbb.ru/post25885.html#p25885 использую но там смысл тот же только с noindex, а как то не хочется от этого расширения отказываться smile

Сайт flashcat

Поделиться

13

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

Да хорошая штука была, в 1.3.4 не пошло что-то.... конфликтов вроде нету, просто ничего не происходит...

Поделиться

14

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

в 1.3.4 работает он?

Поделиться

15

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

bubka, да, у меня работает.

Поделиться

16

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

$link  = forum_htmlencode($forum_db->result($result));

Что-то не понял, а зачем вывод обрабатывать вывод?
Заменил на

$link  = $forum_db->result($result);

Поделиться

17

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

kmbxxx, спец.символы конвертирует в коды, которые отображаются браузером, а не выполняются им.

Моя сборка FluxBB 1.4

Сайт Visman

Поделиться

18

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

kmbxxx,  Попробуй создать тему с именем, например <script>alert('you are hacked!')</script>
потом вставить ссылку на тему, чтобы расширение её сформатировало

Сайт hcs

Поделиться

19

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

Visman, мм?
hcs, Ну я думаю, перед добавлением информации в базу данные проходят соответствующую обработку, и перед выводом их необязательно проверять.
p.s. проверил, вышло как и положено название темы <script>alert('you are hacked!')</script> и ссылка на неё.

Поделиться

20

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

При добавлении в базу данные ни как не обрабатываются для отображении в браузере.
Ф-ия forum_htmlencode() делает обработку для браузера.
P.S. Можно ссылку на тему тестовую? wink

Моя сборка FluxBB 1.4

Сайт Visman

Поделиться

21 (19.09.2010 06:44 отредактировано kmbxxx)

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

Visman, Она не доступна sad ну могу сказать, что html преобразован был в сущности, при редактирование выглядит так:

[url=viewtopic.php?id=47869]&lt;script&gt;alert(&#039;halo!&#039;)&lt;/script&gt;[/url]

Ну я к чему это всё начал, кавычки например отображаются как &quot; в ссылках на темы, что не есть гуд...

Поделиться

22

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

kmbxxx, т.е. при

$link  = $forum_db->result($result);

названия тем выводятся верно и скрипт не выполняется на ссылке вставленой в сообщение?

Моя сборка FluxBB 1.4

Сайт Visman

Поделиться

23

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

kmbxxx пишет:

Visman, мм?
hcs, Ну я думаю, перед добавлением информации в базу данные проходят соответствующую обработку, и перед выводом их необязательно проверять.
p.s. проверил, вышло как и положено название темы <script>alert('you are hacked!')</script> и ссылка на неё.

Всё наоборот, в БД вставляется чистый непреобразованный текст, а на вывод подается преобразованный.
Поэтому я экранировал названия тем, имена пользователей и т.п.
Для меня оказалось полной неожиданностью, что ссылка где-то еще раз преобразуется!

Добавлено спустя 2 минуты 4 секунды:

И я не могу найти это место! В parse_message преобразование идет до вызова моего расширения...

Добавлено спустя 3 минуты 38 секунд:

В исходном коде страницы, без forum_htmlencode теги преобразуются в сущности. т.е. действительно нужно делать текст ссылок без forum_htmlencode. Загадка какая-то smile

Сайт hcs

Поделиться

24

Re: [Запрос] Friendly URL by hcs - дружественные ссылки для 1.3

hcs, так может еще какой мод обработкой сообщений занимается?

Моя сборка FluxBB 1.4

Сайт Visman

Поделиться