Уважаемые пользователи!
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] Prime Links addon: Fast Prime Links

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
c61
phpBB 2.0.6
Сообщения: 506
Стаж: 11 лет 4 месяца
Благодарил (а): 42 раза
Поблагодарили: 251 раз
Контактная информация:

[BETA] Prime Links addon: Fast Prime Links

Сообщение c61 »

Мод phpBB Prime Links (см. на phpBBguru) широко используется для редиректа (переадресации, перенаправления) внешних ссылок, однако, у мода есть существенный недостаток: обработка ссылок ведётся через функцию smiley_text в functions_content.php. С одной сороны, можно быть уверенным, что все ссылки будут изменены, а с другой стороны, замены ссылок выполняются слишком долго, порой увеличивая время выполнения скрипта в два и более раз. Поэтому для экономии ресурсов сервера имеет смысл заменять ссылки только в сообщениях, что реализуемо через Hook System. Все остальные внешние ссылки в шаблонах и др. можно заменить самостоятельно, просто вручную, тем более, что действие мода Prime Links не распространяется на шаблоны overall_header, overall_footer и т.п.

При установке моде Prime Links не следует вносить изменения в includes/functions_content.php, а если изменения уже внесены, то найти:

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

//-- mod: Prime Links -------------------------------------------------------//
	if (!function_exists('prime_links'))
	{
		global $phpEx;
		include($phpbb_root_path . 'includes/prime_links.' . $phpEx);
	}
	$text = prime_links($text);
//-- end: Prime Links -------------------------------------------------------//
и УДАЛИТЬ или закрыть в комментарии приведенный код.

Затем, в includes/prime_links.php:
найти:

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

				$href	= $this->decode_entities($href);
добавить ПЕРЕД:

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

				// mod: Fast Prime Links
				$src_href = $href;
				// end: Fast Prime Links
найти:

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

					$new_link = str_replace('href="', 'href="' . $external_prefix, $new_link);
добавить ПОСЛЕ:

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

					// mod: Fast Prime Links
					if(!empty($external_prefix))
					{
						$href_searches[]     = 'href="' . $external_prefix . $src_href . '"';
						$href_replacements[] = 'href="' . $external_prefix .
									str_replace(
										array('<','>','&',  '#',  '&',  '/',  ':',  ';',  '<',  '=',  '>',  '?'),
										array( '%3C', '%3E',  '%26','%23','%26','%2F','%3A','%3B','%3C','%3D','%3E','%3F'),
																			$src_href) . '"';
					}
					// end: Fast Prime Links
найти:

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

			if (isset($searches) && isset($replacements))
			{
				$message = str_replace($searches, $replacements, $message);
			}
добавить ПОСЛЕ:

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

			// mod: Fast Prime Links
			if (isset($href_searches) && isset($href_replacements))
			{
				$message = str_replace($href_searches, $href_replacements, $message);
			}
			// end: Fast Prime Links
Из кода ниже создать файл hook_fast_prime_links.php, кодировка utf-8 без BOM:

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

<?php
/**
*
* @package phpBB Fast Prime Links Hook (addon for Prime Links mod, see https://www.phpbb.com/community/viewtopic.php?f=69&t=875585)
* @version 1.0.0
* @copyright (c) 2013 c61 http://www.phpbbguru.net & http://c61.no-ip.org
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}

function fast_prime_links()
{
	global $template;

	if(isset($template->_tpldata['postrow']))
	{
		// Применяем функцию do_fast_prime_links() к каждому члену массива postrow, содержащего тексты сообщений
		foreach($template->_tpldata['postrow'] as $key => $val)
		{
			do_fast_prime_links($template->_tpldata['postrow'][$key]['MESSAGE']);
		}
	} elseif (isset($template->_rootref))
	{
		// Применяем функцию do_fast_prime_links() к предпросмотру сообщения
		do_fast_prime_links($template->_rootref['PREVIEW_MESSAGE']);
		// Возможно, есть обзор сообщений в предпросмотре
		if (isset($template->_tpldata['topic_review_row']))
		{
			// Применяем функцию do_fast_prime_links() к каждому члену массива topic_review_row, содержащего тексты сообщений
			foreach($template->_tpldata['topic_review_row'] as $key => $val)
			{
				do_fast_prime_links($template->_tpldata['topic_review_row'][$key]['MESSAGE']);
			}
		}
	}
}

function do_fast_prime_links(&$item)
{
	if(!isset($item)) return;

//-- mod: Prime Links -------------------------------------------------------//
	if (!function_exists('prime_links'))
	{
		global $phpbb_root_path, $phpEx;
		include($phpbb_root_path . 'includes/prime_links.' . $phpEx);
	}
	$item = prime_links($item);
//-- end: Prime Links -------------------------------------------------------//

}

// Регистрируем хук
$phpbb_hook->register(array('template', 'display'), 'fast_prime_links');

?>
и копировать файл hook_fast_prime_links.php (см. код выше) в /includes/hooks.

Очистить кэш.

ВНИМАНИЕ !!! Мод для применения только на слабых серверах, когда требуется экономия времени выполнения скриптов php.
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 15 лет 1 месяц
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 4 раза
Поблагодарили: 352 раза
Контактная информация:

Re: [BETA] Prime Links addon: Fast Prime Links

Сообщение MIT »

c61 писал(а):

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

									str_replace(
										array('<','>','&',  '#',  '&',  '/',  ':',  ';',  '<',  '=',  '>',  '?'),
										array( '%3C', '%3E',  '%26','%23','%26','%2F','%3A','%3B','%3C','%3D','%3E','%3F'),
																			$src_href)
Хм, позволь...

Зачем ты вручную (не совсем полностью, кстати) делаешь преобразование htmlspecialchars_decode -> rawurlencode для значения атрибута в html разметке? Значение атрибута должно быть за-htmlspecialchars-ено, а не за-rawurlencode-но. Через rawurlencode необходимо пропускать значения параметров самой ссылки, а всю ссылку надо пропускать через htmlspecialchars.

Разве нет?
Аватара пользователя
c61
phpBB 2.0.6
Сообщения: 506
Стаж: 11 лет 4 месяца
Благодарил (а): 42 раза
Поблагодарили: 251 раз
Контактная информация:

Re: [BETA] Prime Links addon: Fast Prime Links

Сообщение c61 »

MIT писал(а):Разве нет?
В данном случае не обязательно, но можно и как ты сказал. Если работает Ok - то и не трогаю. Мод подключен на моей тестовой площадке и на одном мелком форуме (все на "домашнем хостинге"), замечаний нет...
Закрыто

Вернуться в «Бета-версии модов для phpBB 3.0.x»