Подключаем CDN хостинг для phpBB

В нашем прошлом материале мы рассказывали о том, как можно подключить CDN хостинг к форуму Invision Power Board. Пришло время поделиться с вами методом, благодаря которому можно заставить работать в сети CDN другой популярный движок для форума — phpBB. В этой статье в качестве форума для теста мы использовали phpBB версии 3.0.7,  данный метод также будет работать и на более поздних версиях. 

Готового модуля который бы с лёгкостью перевёл работу форума под управлением phpBB как в случае с Invision Power Board нет. Поэтому следует сделать ряд изменений в скриптах вашего движка.

Прежде чем вы начнёте вносить изменения в работу скриптов сайта, настоятельно рекомендуем вам сделать резервную копию.

Итак,  приступим.

Forum images

Для начала мы поменяем путь для изображений, которые хранятся на форуме. Необходимо отредактировать файл includes/functions_display.php:

Находим строки

'FORUM_IMAGE' => ($row['forum_image']) ? '</pre>
<img src="' . $phpbb_root_path . $row&#91;'forum_image'&#93; . '" alt="' . $user->lang['FORUM_CAT'] . '" />
<pre>' : '',
'FORUM_IMAGE_SRC' => ($row['forum_image']) ? $phpbb_root_path . $row['forum_image'] : '',

И меняем их на

'FORUM_IMAGE' => ($row['forum_image']) ? '</pre>
<img src="http://cdn.вашдомен.com/directory/path/' . $row&#91;'forum_image'&#93; . '" alt="' . $user->lang['FORUM_CAT'] . '" />
<pre>' : '',
'FORUM_IMAGE_SRC' => ($row['forum_image']) ? 'http://cdn.вашдомен.com/directory/path/' . $row['forum_image'] : '',
Smiles

Теперь меняем путь к смайликам фашего форума. Для этого отредактируем файл includes/functions_content.php:

/**
* Smiley processing
*/
function smiley_text($text, $force_option = false)
{
	global $config, $user, $phpbb_root_path;

	if ($force_option || !$config['allow_smilies'] || !$user->optionget('viewsmilies'))
	{
		return preg_replace('#<!--\-\- s(.*?) \-\---></pre>
<img src="\{SMILIES_PATH\}\/.*? \/><!\-\- s\1 \-\->#', '\1', $text); 	} 	else 	{ 		$root_path = (defined('PHPBB_USE_BOARD_URL_PATH') && PHPBB_USE_BOARD_URL_PATH) ? generate_board_url() . '/' : $phpbb_root_path; 		return preg_replace('#<!\-\- s(.*?) \-\-><img src=" alt="" />
<pre><!--\-\- s\1 \-\--->#', '

Делаем следующие исправления

{
    global $config, $user, $phpbb_root_path;

    if ($force_option || !$config['allow_smilies'] || !$user->optionget('viewsmilies'))
    {
        return preg_replace('#<!--\-\- s(.*?) \-\---></pre>
<img src="\http://cdn.вашдомен.com/directory/path\/.*? \/><!\-\- s\1 \-\->#', '\1', $text);<br />    }<br />    else<br />    {<br />        $root_path = (defined('PHPBB_USE_BOARD_URL_PATH') && PHPBB_USE_BOARD_URL_PATH) ? generate_board_url() . '/' : $phpbb_root_path;<br />        return preg_replace('#<!\-\- s(.*?) \-\-><img src=" alt="" />
<pre><!--\-\- s\1 \-\--->#', '</pre>
<img src="&quot;http://cdn.вашдомен.com/directory/path/'" alt="" />
<pre>', $text);
    }
}

Теперь отредактируем файл includes/functions_posting.php:

'SMILEY_IMG'	=> $root_path . $config['smilies_path'] . '/' . $row['smiley_url'],

Заменим на

'SMILEY_IMG'    => 'http://cdn.вашдомен.com/directory/path/' . $config['smilies_path'] . '/' . $row['smiley_url'],
Ranks

Для изменения пути к изображениям для званий следует отредактировать файл includes/functions_display.php:

$rank_img = (!empty($ranks['special'][$user_rank]['rank_image'])) ? '</pre>
<img title="' . $ranks&#91;'special'&#93;&#91;$user_rank&#93;&#91;'rank_title'&#93; . '" src="' . $phpbb_root_path . $config&#91;'ranks_path'&#93; . '/' . $ranks&#91;'special'&#93;&#91;$user_rank&#93;&#91;'rank_image'&#93; . '" alt="' . $ranks&#91;'special'&#93;&#91;$user_rank&#93;&#91;'rank_title'&#93; . '" />
<pre>' : '';

Меняем на

$rank_img = (!empty($ranks['special'][$user_rank]['rank_image'])) ? '</pre>
<img title="' . $ranks&#91;'special'&#93;&#91;$user_rank&#93;&#91;'rank_title'&#93; . '" src="http://cdn.вашдомен.com/directory/path/' . $ranks&#91;'special'&#93;&#91;$user_rank&#93;&#91;'rank_image'&#93; . '" alt="' . $ranks&#91;'special'&#93;&#91;$user_rank&#93;&#91;'rank_title'&#93; . '" />
<pre>' : '';
ImageSet

Сейчас отредактируем файл includes/session.php:

$img_data['src'] = $root_path . 'styles/' . rawurlencode($this->theme['imageset_path']) . '/imageset/' . ($this->img_array[$img]['image_lang'] ? $this->img_array[$img]['image_lang'] .'/' : '') . $this->img_array[$img]['image_filename'];

Поменяем на

$img_data['src'] = 'http://cdn.вашдомен.com/directory/path/' . rawurlencode($this->theme['imageset_path']) . '/imageset/' . ($this->img_array[$img]['image_lang'] ? $this->img_array[$img]['image_lang'] .'/' : '') . $this->img_array[$img]['image_filename'];

Также вы можете изменить путь к вашему CSS, прописав в шаблоне вашего форума полный путь

<link rel="stylesheet" href="http://cdn.вашдомен.com/templates/шаблон/css/template.css" type="text/css">
phpbb Использование cdn

Дмитрий

Технический директор Hostpro.ua