Несмотря на то, что в сети можно найти кучу материала на эту тему, я решил объединить все, что я знаю по этому поводу в своей статье. Кстати про phpbb plus я в свое время никакого материала не нашел. Слава Богу, что там все идентично и поэтому установка кода для phpbb и phpbb plus не будет отличаться. Итак, приступим...

1. Подготовительные действия.
Чтобы все заработало как надо, необходимо в первую очередь установить специальный мод Guest Sessions Mod, который уберет идентификационные сессии для гостей, которые нам не нужны (кстати и для индексации сайта так лучше будет).

Открываем includes/sessions.php
1.1 Ищем:
$sql = "UPDATE " . SESSIONS_TABLE . «
SET session_user_id = $user_id, session_start = $current_time, session_time = $current_time, session_page = $page_id, session_logged_in = $login, session_admin = $admin
WHERE session_id = '» . $session_id . «'
AND session_ip = '$user_ip'»;
Заменяем на:
$sql_ip = $user_id == ANONYMOUS ? « AND session_ip = '$user_ip'» : '';
$sql = "UPDATE " . SESSIONS_TABLE . «
SET session_ip = '$user_ip', session_start = $current_time, session_time = $current_time, session_page = $page_id, session_logged_in = $login, session_admin = $admin
WHERE session_id = '» . $session_id . «' $sql_ip
AND session_user_id = '$user_id'»;

1.2 Ищем:
$SID = 'sid=' . $session_id;
Заменяем на:
$SID = $user_id > 0 ? 'sid=' . $session_id : '';

1.3 Ищем:
$SID = ($sessionmethod == SESSION_METHOD_GET || defined('IN_ADMIN')) ? 'sid=' . $session_id : '';
Заменяем на:
$SID = $userdata['user_id'] > 0 ? (($sessionmethod == SESSION_METHOD_GET || defined('IN_ADMIN')) ? 'sid=' . $session_id : '') : '';

1.4 Ищем:
//
// If we reach here then no (valid) session exists. So we'll create a new one,
Перед эти пишем:
elseif(empty($sessiondata))
{
// try to login guest
$sql = "SELECT u.*, s.*
FROM " . SESSIONS_TABLE . " s, " . USERS_TABLE . " u
WHERE s.session_ip = '$user_ip'
AND s.session_user_id = " . ANONYMOUS . «
AND u.user_id = s.session_user_id
LIMIT 0, 1»;
if ( !($result = $db->sql_query($sql)) )
{
message_die(CRITICAL_ERROR, 'Error doing DB query userdata row fetch', '', __LINE__, __FILE__, $sql);
}

$userdata = $db->sql_fetchrow($result);

if ( isset($userdata['user_id']) )
{
if ( $current_time — $userdata['session_time'] > 60 )
{
$sql = "UPDATE " . SESSIONS_TABLE . «
SET session_time = $current_time, session_start = $current_time, session_page = 0
WHERE session_id = '» . $userdata['session_id'] . «'»;
if ( !$db->sql_query($sql) )
{
message_die(CRITICAL_ERROR, 'Error updating sessions table', '', __LINE__, __FILE__, $sql);
}
}
return $userdata;
}
}

На этом подготовительный этап завершен и можно устанавливать сам код SAPE или XAP.

2. SAPE.

2.1 Открываем includes/page_tail.php

2.1.1 Ищем:
if ( !defined('IN_PHPBB') )
{
die('Hacking attempt');
}
Перед этим пишем:
//
// sape
//
function sapelinks()
{
define('_SAPE_USER', 'ваш идентификатор');
require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php');
$sape = new SAPE_client();
$output = $sape->return_links();
return $output;
}

2.1.2 Ищем:
$template->pparse('overall_footer');
Перед этим пишем:
//
// sape
//
$template->assign_vars(array(
'SAPELINKS' => sapelinks()
));

Открываем templates/используемый_стиль/overall_footer.tpl
2.2.1 Там, где нужно вывести ссылки, пишем:
{SAPELINKS}

Таким образом, код SAPE установлен. Теперь устанавливаем код XAP, тем более, что процесс установки ничем не отличается.

3. XAP.

3.1 Открываем includes/page_tail.php

3.1.1 Ищем:

if ( !defined('IN_PHPBB') )
{
die('Hacking attempt'); }
Перед этим пишем:
function xap_links()
{
$cache_dir = '/folder/'; // имя Вашей папки папки вместо folder!

include_once($_SERVER['DOCUMENT_ROOT'] . $cache_dir . 'tnx.php');
$tnx = new TNX_n('your_login', $cache_dir); // ваш логин в системе
// echo $tnx->show_link(1); // выводим первую ссылку
// echo $tnx->show_link(1); // выводим вторую ссылку, желательно в другом месте страницы, ниже
// echo $tnx->show_link(1); // выводим третью ссылку, желательно в другом месте страницы, ниже
// echo $tnx->show_link(); // выводим оставшиеся, желательно в другом месте страницы, ниже
$output = $tnx->show_link();
return $output;
}

3.1.2 Ищем:
$template->pparse('overall_footer');
Перед этим пишем:
$template->assign_vars(array(
'XAP_LINKS' => xap_links()
));

Открываем templates/используемый_стиль/overall_footer.tpl
3.2.1 Там, где нужно вывести ссылки, пишем:
{XAP_LINKS}

На этом все! Код SAPE или XAP установлен на Вашем форуме!