Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

[BETA] urlname: преобразование ссылок в их имена

Здесь авторы могут постить бета-версии своих расширений для phpBB. Внимание! Не устанавливайте бета-версии расширений на работающие форумы!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.2.x | FAQ | Внимание! Прежде чем создать тему - прочти! | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).

Внимание! Не устанавливайте бета-версии расширений на работающие форумы!
Аватара пользователя
c61
phpBB 2.0.6
Сообщения: 506
Стаж: 11 лет 5 месяцев
Благодарил (а): 20 раз
Поблагодарили: 81 раз

[BETA] urlname: преобразование ссылок в их имена

Сообщение c61 »

См. [BETA] hook_urlname: преобразование ссылок в их имена
Скачать:
ext.rar
URLName: URLs to names converter
phpBB 3.1 extension

copyright (c) 2014 c61 c61@yandex.ru http://c61.su
license http://opensource.org/licenses/gpl-license.php GNU Public License

URLName: Преобразование ссылок в их имена

Расширение предоставляет возможность преобразовать в понятный вид ссылки на:
- форум
- тему
- собщение
- профиль пользователя
и добавит возможности их оформления.

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

Перед установкой расширения желательно применить патч для корректного отображения url с кириллицей.

Начиная с версии 3.1.3 патч не требуется, однако, разработчики так и не довели до ума поддержку национальных доменов и некоторые wiki-ссылки (и не только) будут обработаны неверно. Патч:
Скрытый текст
Патч для корректного отображения url с кириллицей (для этого расширения и не только), установка:

1) Открыть файл /forum/includes/functions.php и сохранить его в кодировке utf-8 без BOM.

2) В /forum/includes/functions.php найти

Код: Выделить всё

			$inline = ($mode == 'url') ? ')' : '';
и ЗАМЕНИТЬ на

Код: Выделить всё

			$inline = (($mode == 'url') ? ')' : '') . '"`){}«»\pS\p{Pc}\p{Pd}\p{Pe}\p{Pf}\p{Po}';
затем найти

Код: Выделить всё

			return "[a-z]$scheme*:/{2}(?:(?:[a-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})+|[0-9.]+|\[[a-z0-9.]+:[a-z0-9.]+:[a-z0-9.:]+\])(?::\d*)?(?:/(?:[a-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?";
и ЗАМЕНИТЬ на

Код: Выделить всё

			return "[a-z]$scheme*:/{2}(?:(?:[\pLa-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})+|[0-9.]+|\[[\pLa-z0-9.]+:[\pLa-z0-9.]+:[\pLa-z0-9.:]+\])(?::\d*)?(?:/(?:[\pLa-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[\pLa-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[\pLa-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?";
затем найти

Код: Выделить всё

			$inline = ($mode == 'www_url') ? ')' : '';
и ЗАМЕНИТЬ на

Код: Выделить всё

			$inline = (($mode == 'www_url') ? ')' : '') . '"`){}«»\pS\p{Pc}\p{Pd}\p{Pe}\p{Pf}\p{Po}';
затем найти

Код: Выделить всё

			return "www\.(?:[a-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})+(?::\d*)?(?:/(?:[a-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?";
и ЗАМЕНИТЬ на

Код: Выделить всё

			return "www\.(?:[\pLa-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})+(?::\d*)?(?:/(?:[\pLa-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[\pLa-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[\pLa-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?";
затем найти

Код: Выделить всё

			return "(?:[a-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})*(?:/(?:[a-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?";
и ЗАМЕНИТЬ на

Код: Выделить всё

			return "(?:[\pLa-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})*(?:/(?:[\pLa-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[\pLa-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[\pLa-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?";
rxu писал(а):Правки из пунктов 3 и 4 (первый пост) в ядре с 3.1.2-RC1.
пункты 3 и 4 
3) В /forum/includes/functions_content.php найти

Код: Выделить всё

	$short_url = (strlen($url) > 55) ? substr($url, 0, 39) . ' ... ' . substr($url, -10) : $url;
и ЗАМЕНИТЬ на

Код: Выделить всё

	$short_url = (utf8_strlen($url) > 55) ? utf8_substr($url, 0, 39) . ' ... ' . utf8_substr($url, -10) : $url;
затем найти

Код: Выделить всё

			'#(^|[\n\t (>.])(' . preg_quote($server_url, '#') . ')/(' . get_preg_expression('relative_url_inline') . ')#i',
и ЗАМЕНИТЬ на

Код: Выделить всё

			'#(^|[\n\t (\]>.])(' . preg_quote($server_url, '#') . ')/(' . get_preg_expression('relative_url_inline') . ')#iu',';
затем найти

Код: Выделить всё

			'#(^|[\n\t (>.])(' . get_preg_expression('url_inline') . ')#i',
и ЗАМЕНИТЬ на

Код: Выделить всё

			'#(^|[\n\t (\]>.])(' . get_preg_expression('url_inline') . ')#iu',
затем найти

Код: Выделить всё

			'#(^|[\n\t (>])(' . get_preg_expression('www_url_inline') . ')#i',
и ЗАМЕНИТЬ на

Код: Выделить всё

			'#(^|[\n\t (\]>])(' . get_preg_expression('www_url_inline') . ')#iu',
затем найти

Код: Выделить всё

			'/(^|[\n\t (>])(' . get_preg_expression('email') . ')/i',
и ЗАМЕНИТЬ на

Код: Выделить всё

			'/(^|[\n\t (\]>])(' . get_preg_expression('email') . ')/iu',
4) В /forum/includes/message_parser.php найти

Код: Выделить всё

		if (!preg_match('#^' . get_preg_expression('url') . '$#i', $in) && !preg_match('#^' . get_preg_expression('www_url') . '$#i', $in))
и ЗАМЕНИТЬ на

Код: Выделить всё

		if (!preg_match('#^' . get_preg_expression('url') . '$#iu', $in) && !preg_match('#^' . get_preg_expression('www_url') . '$#iu', $in))
затем найти

Код: Выделить всё

		if (!preg_match('#^' . get_preg_expression('url') . '$#i', $in) &&
			!preg_match('#^' . get_preg_expression('www_url') . '$#i', $in))
и ЗАМЕНИТЬ на

Код: Выделить всё

		if (!preg_match('#^' . get_preg_expression('url') . '$#iu', $in) &&
			!preg_match('#^' . get_preg_expression('www_url') . '$#iu', $in))
затем найти

Код: Выделить всё

		if (preg_match('#^' . get_preg_expression('url') . '$#i', $url) ||
			preg_match('#^' . get_preg_expression('www_url') . '$#i', $url) ||
			preg_match('#^' . preg_quote(generate_board_url(), '#') . get_preg_expression('relative_url') . '$#i', $url))
и ЗАМЕНИТЬ на

Код: Выделить всё

		if (preg_match('#^' . get_preg_expression('url') . '$#iu', $url) ||
			preg_match('#^' . get_preg_expression('www_url') . '$#iu', $url) ||
			preg_match('#^' . preg_quote(generate_board_url(), '#') . get_preg_expression('relative_url') . '$#iu', $url))
5) Очистить кэш.

Патч для кириллицы может быть оформлен только как патч, никакого расширения. Без патча расширение будет работать некорректно.
P.S. Преобразовал из хука phpBB 3.0.12 по просьбе rxu, раньше, чем собирался, поскольку было свободное время...

P.P.S. То, что сделали с phpBB 3.1... Ранее я отслеживал процесс разработки, но глубоко не копал. А вот копнул поглубже и ужаснулся... Извращение, имхо. Занимался народ совершенно не тем, чем надо ))


Особенности версий:
1) Выдачу отладочной информации в версии 0.0.1 приделал с помощью overall_footer_copyright_append, а надо бы клеить к debug_output. rxu, неплохо бы добавить такую возможность... Потому что в некоторых стилях информация будет отображаться не там, где хотелось бы.
2) Английского перевода не делал, желающие могут сделать самостоятельно или я сам приделаю после выхода релиза.


Тема на моей тестовой площадке тынц
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось c61 25.05.2019 21:16, всего редактировалось 8 раз.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16386
Стаж: 18 лет
Откуда: Красноярск
Благодарил (а): 524 раза
Поблагодарили: 1749 раз

Re: [BETA] urlname: преобразование ссылок в их имена

Сообщение rxu »

c61 писал(а):P.S. Патч для кириллицы может быть оформлен только как патч, никакого расширения. Без патча расширение будет работать некорректно.
Вообще, основное предназначение расширений - исключить правку кода ядра, без этого смысла в них нет никакого.
Может, добавить событие в нужное место? Например, для полного обхода get_preg_expression() и других?
Изображение
Аватара пользователя
xisp
phpBB 3.0.0 RC7
Сообщения: 1798
Стаж: 12 лет
Благодарил (а): 101 раз
Поблагодарили: 91 раз
Забанен: Бессрочно

Re: [BETA] urlname: преобразование ссылок в их имена

Сообщение xisp »

rxu писал(а):Может, добавить событие в нужное место?
Может, лучше движок исправить, для корректной работы национальных урлов?
rxu писал(а):без этого смысла в них нет никакого.
Ну да, получается старый добрый мод.
phpBBex
Аватара пользователя
c61
phpBB 2.0.6
Сообщения: 506
Стаж: 11 лет 5 месяцев
Благодарил (а): 20 раз
Поблагодарили: 81 раз

Re: [BETA] urlname: преобразование ссылок в их имена

Сообщение c61 »

Без патчей победить проблемы с кириллическими url нереально, после втыкания расширений будет просто ужОс. Почему бы не поправить код ? Давно пора разработчиков заставить это сделать, не только русскоязычных пользователей достали эти фичи и баги.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16386
Стаж: 18 лет
Откуда: Красноярск
Благодарил (а): 524 раза
Поблагодарили: 1749 раз

Re: [BETA] urlname: преобразование ссылок в их имена

Сообщение rxu »

xisp писал(а):Может, лучше движок исправить, для корректной работы национальных урлов?
Этих правок достаточно, или нет? Что с валидацией ссылок? Что с символами, запрещенными в стандартах для IRI?
Не всё так просто, как кажется на первый взгляд. С 2012 года висит http://area51.phpbb.com/phpBB/viewtopic ... 08&t=42633
Изображение
Аватара пользователя
xisp
phpBB 3.0.0 RC7
Сообщения: 1798
Стаж: 12 лет
Благодарил (а): 101 раз
Поблагодарили: 91 раз
Забанен: Бессрочно

Re: [BETA] urlname: преобразование ссылок в их имена

Сообщение xisp »

Честно? По фиг. Надо было сделать хоть как- то, а неровности выявить во время бета тестирования. Сейчас уже поздно, да.
Впрочем, в phpBBex похожее исправление уже сто лет, и никаких побочных эффектов ни я, ни другие пользователи форка не заметили.
phpBBex
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16386
Стаж: 18 лет
Откуда: Красноярск
Благодарил (а): 524 раза
Поблагодарили: 1749 раз

Re: [BETA] urlname: преобразование ссылок в их имена

Сообщение rxu »

Сейчас, может, и не поздно, но "хоть как-то" не пропустят.
Попробовать, конечно, можно - денег не возьмут.

Добавлено спустя 38 секунд:
rxu писал(а):Этих правок достаточно, или нет?
Добавлено спустя 4 минуты 40 секунд:
https://tracker.phpbb.com/browse/PHPBB3-12926
Изображение
Аватара пользователя
xisp
phpBB 3.0.0 RC7
Сообщения: 1798
Стаж: 12 лет
Благодарил (а): 101 раз
Поблагодарили: 91 раз
Забанен: Бессрочно

Re: [BETA] urlname: преобразование ссылок в их имена

Сообщение xisp »

c61 писал(а):

Код: Выделить всё

$inline = (($mode == 'url') ? ')' : '') . '"`){}«»\pS\p{Pc}\p{Pd}\p{Pe}\p{Pf}\p{Po}';
Тут ошибки нету? Именно так и должно быть '') ?
rxu писал(а): но "хоть как-то" не пропустят.
Хоть как- то можно было бы продавливать на альфа стадии, вот к чему я.
rxu писал(а):Сейчас, может, и не поздно,
Кто зафорсит?
phpBBex
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16386
Стаж: 18 лет
Откуда: Красноярск
Благодарил (а): 524 раза
Поблагодарили: 1749 раз

Re: [BETA] urlname: преобразование ссылок в их имена

Сообщение rxu »

xisp писал(а):Кто зафорсит?
Могу сделать PR, но на мой вопрос никто не ответил.
Изображение
Аватара пользователя
xisp
phpBB 3.0.0 RC7
Сообщения: 1798
Стаж: 12 лет
Благодарил (а): 101 раз
Поблагодарили: 91 раз
Забанен: Бессрочно

Re: [BETA] urlname: преобразование ссылок в их имена

Сообщение xisp »

rxu писал(а):но на мой вопрос никто не ответил.
В эксе даже меньше правок на это счёт, но работает. Сейчас c61 уточнит про мой вопрос (на мой непрофессиональный взгляд, тут ошибочка), и можно будет PR делать.
phpBBex
Аватара пользователя
c61
phpBB 2.0.6
Сообщения: 506
Стаж: 11 лет 5 месяцев
Благодарил (а): 20 раз
Поблагодарили: 81 раз

Re: [BETA] urlname: преобразование ссылок в их имена

Сообщение c61 »

xisp писал(а):Тут ошибки нету?
Нет. В конструкции далее '"`) три разные кавычки.
rxu писал(а):Этих правок достаточно, или нет?
Теоретически - 100% нет. Практически - почти достаточно, при отладке были непроходимые ссылочки, уже и не припомню, какие.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16386
Стаж: 18 лет
Откуда: Красноярск
Благодарил (а): 524 раза
Поблагодарили: 1749 раз

Re: [BETA] urlname: преобразование ссылок в их имена

Сообщение rxu »

c61 писал(а):Теоретически - 100% нет.
Чего не хватает?
Изображение
Аватара пользователя
c61
phpBB 2.0.6
Сообщения: 506
Стаж: 11 лет 5 месяцев
Благодарил (а): 20 раз
Поблагодарили: 81 раз

Re: [BETA] urlname: преобразование ссылок в их имена

Сообщение c61 »

rxu писал(а):Чего не хватает?
1) В той части патча functions.php, про которую задал вопрос xisp, не все символы учтены в конструкциях после упомянутых кавычек, проявлялось на экзотических ссылочках каких-то wiki. Уже не припомню. Можно тупо посмотреть по таблицам символов и что учтено-не учтено во всяких \pS\p{Pc} и тд
2) Касаемо "фичи" phpBB с символами .?!:, можно в functions_content.php это место как-то по-иному обработать (со строки 688).
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16386
Стаж: 18 лет
Откуда: Красноярск
Благодарил (а): 524 раза
Поблагодарили: 1749 раз

Re: [BETA] urlname: преобразование ссылок в их имена

Сообщение rxu »

c61 писал(а):не все символы учтены в конструкциях после упомянутых кавычек
Вот об этом я и спрашивал выше.
c61 писал(а):Можно тупо посмотреть по таблицам символов и что учтено-не учтено во всяких \pS\p{Pc} и тд
В RFC по ссылке есть линки на стандарты, в т.ч. таблицы разрешенных символов (http://unicode.org/faq/idn.html#33). Не всё из этого мне понятно.
Пример: [ \P{Changes_When_NFKC_Casefolded} или - \p{block=Combining_Diacritical_Marks_For_Symbols} - как задать в коде?

Добавлено спустя 2 минуты 47 секунд:
А может, использовать встроенные функции PHP для IDN?

Добавлено спустя 3 минуты 24 секунды:
Например, если idn_to_ascii вернула false, валидация не пройдена.
Изображение
Аватара пользователя
c61
phpBB 2.0.6
Сообщения: 506
Стаж: 11 лет 5 месяцев
Благодарил (а): 20 раз
Поблагодарили: 81 раз

Re: [BETA] urlname: преобразование ссылок в их имена

Сообщение c61 »

rxu, см. http://ru2.php.net/manual/en/regexp.ref ... nicode.php , подбирал свойства пользуясь этим документом.

А если заморачиваться отдельными символами разных национальных алфавитов, например катаканой, то это плохо кончится...

Вернуться в «Бета-версии расширений для phpBB»