v.0.1.8-20140316
copyright (c) 2014 c61 http://c61.no-ip.org <c61@yandex.ru>
license http://opensource.org/licenses/gpl-license.php GNU Public License
Если в сообщениях публикуются внутренние ссылки на форумы, темы, сообщения и профили пользователей без использования ББ-кода url с текстовой подсказкой, то часто не ясно, куда же они ведут. Такие внутренние ссылки автоматически преобразуются аналогично тэгу url, в результате ссылка (пример)
Код: Выделить всё
http://c61.no-ip.org/forum/viewtopic.php?f=11&t=91&p=199#p199
Код: Выделить всё
[url=http://c61.no-ip.org/forum/viewtopic.php?f=11&t=91&p=199#p199]viewtopic.php?f=11&t=91&p=199#p199[/url]
Код: Выделить всё
<a href="http://c61.no-ip.org/forum/viewtopic.php?f=11&t=91&p=199#p199">viewtopic.php?f=11&t=91&p=199#p199</a>
- форум
- тему
- собщение
- профиль пользователя
Функционально аналогичный мод "Simple Url To Link Name before posting" (см. тему на форуме автора, известного под никнеймом Поручик, или на форуме русской поддержки phpbb) делает почти то же самое, но обладает как преимуществами (непример, меньше потребление ресурсов, есть поддержка SEO модов), так и недостатками (например, в опубликованных до установки мода сообщениях ссылки не заменяются, нет выделений названий и ников пользователей, нет цветов ников, есть проблемы с темами/сообщениями в заголовки которых включены ББ-коды в квадратных скобках). Возможно, кому-то покажется проще использовать один файл для hook system, чем редактировать код phpBB. В предлагаемом моде были использованы некоторые идеи вышеуказанного аналога, спасибо автору !
Тестирование данного мода совместно с SEO Ultimate SEO URL проводилось на площадке Shredder'а. Спасибо за тестирование и участие в отладке !
ВНИМАНИЕ !!!
- Мод совместим с модами, изменяющими внутренние ссылки: phpBB SEO Ultimate SEO URL, Simple SEO Mod для PHPBB3, но полное тестирование не завершено, возможны ошибки. Работы по устранению этого недостатка запланированы.
- Если Вы намерены использовать wiki-ссылки, перед установкой мода необходимо применить патч для корректного отображения ссылок, содержащих русские буквы и специальные символы, примерно такой, как приведён ниже. Это мод Non-latin Symbols in URL с дополнениями, инструкция инже может отличаться от оригинала и вариантов, приведенных на других ресурсах по phpBB, а также могут отличаться зависимые от версии phpBB строки для поиска.
- Мод устраняет фичи phpbb, связанные с корректным включением последнего символа (.,:!?) в ссылку
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})*)?";
Код: Выделить всё
$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;
Код: Выделить всё
$magic_url_match[] = '#(^|[\n\t (>.])(' . preg_quote($server_url, '#') . ')/(' . get_preg_expression('relative_url_inline') . ')#ie';
Код: Выделить всё
$magic_url_match[] = '#(^|[\n\t (\]>.])(' . preg_quote($server_url, '#') . ')/(' . get_preg_expression('relative_url_inline') . ')#ieu';
Код: Выделить всё
$magic_url_match[] = '#(^|[\n\t (>.])(' . get_preg_expression('url_inline') . ')#ie';
Код: Выделить всё
$magic_url_match[] = '#(^|[\n\t (\]>.])(' . get_preg_expression('url_inline') . ')#ieu';
Код: Выделить всё
$magic_url_match[] = '#(^|[\n\t (>])(' . get_preg_expression('www_url_inline') . ')#ie';
Код: Выделить всё
$magic_url_match[] = '#(^|[\n\t (\]>])(' . get_preg_expression('www_url_inline') . ')#ieu';
Код: Выделить всё
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))
6) Установить STK (Support ToolKit for phpBB), войти в STK и выполнить пункт Средства администрирования->Репарсинг BBcode постов и ЛС, отметив "Репарсинг всех абсолютно BBCode:"
Установка мода:
1) При необходимости внести изменения в файл includes/hooks/hook_urlname.php по части
- выдачи отладочной информации (только пользователям с правами Администратора); для отключения найдитеи замените значение на false
Код: Выделить всё
private $debug = true;
Отладочная информация выдаётся при включенной в config.php опции DEBUG внизу экрана (строка с всплывающей подсказкой с именем мода и номером версии) в форматегде Time - время выполнения мода;Код: Выделить всё
hUN Time : 0.000s | 0/0 Queries | 0 Magic urls corr`d
Queries - количество нормальных и кэшированных sql-запросов;
Magic urls corr`d - количество скорректированных фич обработки magic url в phpBB.
...
ВНИМАНИЕ !!! Из-за специфики hook system phpBB стандартная отладочная информация выдаётся без учёта времени выполнения хук-функций и количества выполненных в них sql-запросов
... - разрешения корректировок фич phpBB при обработке magic url; для отключения найдитеи замените значение на false
Код: Выделить всё
private $correct_phpbb_bugs = true;
- времени кэширования sql=запросов в секундах (0 - отключено), для изменения задайте требуемое число в строкеи учтите, что при изменении сообщений/тем/формуов или имён пользователей информация будет обновлена только после истечения указанного времени кэширования; для немедленного обновления следует очистить кэш
Код: Выделить всё
private $sql_cache_ttl = 0;
- всплывающей подсказки (время размещения и номер сообщения) названий тем, сообщений; для отключения найдитеи замените значение на false
Код: Выделить всё
$this->use_iurl_title['use'] = true;
- выделения названий форумов, тем, сообщений (по умлчанию включено, тэги strong, i); для отключения найдитеи замените значение на false
Код: Выделить всё
$this->use_iurl_strong['use'] = true;
- использования цвета ника пользователя; для отключения найдитеи замените значение на false
Код: Выделить всё
$this->use_user_colour = true;
- выделения ника пользователя (по умолчанию включено, тэг strong); для отключения найдитеи замените значение на false
Код: Выделить всё
$this->use_user_strong['use'] = true;
- обработки url ресурсов wiki и выделения разделов wiki (по умолчанию включено, тэг i); для отключения закомментируйте или удалитеВы можете добавить ссылки, см. http://ru.community.wikia.com/wiki/Спис ... ском_языке
Код: Выделить всё
{ $this->wiki_search = array( '/>http(.*?)\:\/\/(\S+)\.community\.wikia\.com\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(\S+)\.wikipedia\.org\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(\S+)\.wikiquote\.org\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(\S+)\.wikibooks\.org\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(wiki)\.phpbb\.com\/(.*?)</isu', '/>http(.*?)\:\/\/(wiki)\.wargaming\.net\/ru\/(.*?)</isu', '/>http(.*?)\:\/\/(wiki)\.iteach\.ru\/index\.php\/(.*?)</isu', '/>http(.*?)\:\/\/(wiki)\.debian\.org\/(.*?)</isu', '/>http(.*?)\:\/\/(wiki)\.web\.ru\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(www\.)*lurkmore\.to\/(.*?)</isu', '/>http(.*?)\:\/\/(www\.)*sportswiki\.ru\/(.*?)</isu', '/>http(.*?)\:\/\/(www\.)*altlinux\.org\/(.*?)</isu', '/>http(.*?)\:\/\/(\S+)\.ageofstars\.wikia\.com\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(\S+)\.althistory\.wikia\.com\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(\S+)\.coincollecting\.wikia\.com\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(\S+)\.cybernetics\.wikia\.com\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(\S+)\.math\.wikia\.com\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(\S+)\.morfey13\.wikia\.com\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(\S+)\.prikolchik\.wikia\.com\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(\S+)\.russianhistory\.wikia\.com\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(\S+)\.science\.wikia\.com\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(\S+)\.pages\.wikia\.com\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(\S+)\.tarna-ilu\.wikia\.com\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(www\.)*mind-control\.wikia\.com\/wiki\/(.*?)</isu', '/>http(.*?)\:\/\/(www\.)*absurdopedia\.wikia\.com\/wiki\/(.*?)</isu', ); }
- обработки url SEO Ultimate SEO URL и Simple SEO (по умолчанию включено); если не используется ни один из SEO модов для отключения закомментируйте или удалите фрагменты кодаи
Код: Выделить всё
{ $this->sseo_search = array( 'p' => '/>post(\d+)(.*?)\.html(.*?)#p(\d+)/isu', 'pt' => '/>topic(\d+)(.*?)\.html(.*?)#p(\d+)/isu', 't' => '/>topic(\d+)(.*?)\.html/isu', 'f' => '/>forum(\d+)\.html/isu', 'u' => '/>member(\d+)\.html/isu', ); }
однако, если используется Simple SEO, требуется оставить только первый фрагмент, а если используется SEO Ultimate SEO URL, требуется оставить оба фрагментаКод: Выделить всё
{ $this->useo_search = array( 'p' => '/>(.*?)-t(\d+)(.*?)\.html(.*?)#p(\d+)/isu', 't' => '/>(.*?)-t(\d+)(.*?)\.html/isu', 'f' => '/>(.*?)\.html/isu', 'f-f' => '/>(.*?)-f(\d+)\.html/isu', 'u' => '/>(.*?)-u(\d+)\.html/isu', ); }
3) Очистить кэш.
ВНИМАНИЕ !!! Просьба сообщать о результатах после установки мода на конференции, где установлены SEO-моды. При обнаружении ошибок прошу давать ссылку на конференцию и тестовый вход, это поможет в работе над этим модом.
Примеры ссылок можно посмотреть на моей тестовой площадке в теме мода тынц.
P.S. Обратите внимание: используется хук, следовательно, все внутренние ссылки в ранее опубликованных сообщениях будут преобразованы как надо. Однако, это не относится к wiki url с кириллицей, да и репарсинг ББ-кодов при помощи STK может не помочь... Тем не менее, wiki url с кириллицей гарантированно будут корректно обработаны в сообщениях, размещаемых после применения вышеуказанного патча и установки мода.
Скачать: Скачать предыдущую версию: