форум общения русскоязычных пользователей CMS Текстпаттерн
Вы не зашли.
Здравствуйте! Недавно возникла необходимость в интеграции сайта site.ru с форумом phpbb3 forum.site.ru
Хочу поделиться наработками.
1. В моем случае форум находится на поддомене, соответственно заходим в административный раздел форума, в 1-й вкладке (общие, конфигурация сервера) ищем "Настройки cookies" и вместо site.ru прописываем .site.ru
2. Создаем (с помощью Plugin Composer, например) новый plugin и называем его if_user
function if_user($atts,$thing=NULL) { global $phpbb_root_path, $phpEx, $user, $db, $config, $cache, $template; define('IN_PHPBB', true); $phpbb_root_path = '/полный_путь_к/forum.site.ru/'; $phpEx = 'php'; include($phpbb_root_path . 'common.php'); $user->session_begin(); global $user; if ($thing===NULL) return $user->data['username']; return parse(Evalelse($thing, ($user->data['is_registered']))); }
<txp:if_user /> вернет нам имя пользователя (в случае если на данный момент пользователь аутентифицирован на форуме)
конструкция:
<txp:if_user>
Имя пользователя: <txp:if_user />
<txp:else />
Пользователь не аутентифицирован
</txp:if_user>
в пояснениях не нуждается.
Если интересно, пожже я могу опубликовать методы авторизации на форуме с сайта.
P.S. Большая благодарность Виктору (the_ghost) за помощь в освоении textpattern, терпение и понимание
Отредактированно humka (22-02-2011 17:30:22)
Неактивен
Тут проблемка выявилась с кешированием. Т.е. если мы посетили страницы А1 и А2, вернулись на главную, аутентифицировались, а потом опять зашли на страницу А1 или А2 - они возьмутся из кеша, и соответственно плагин нам не покажет что мы "зарегистрированный пользователь".
Неактивен
humka написал:
Тут проблемка выявилась с кешированием. Т.е. если мы посетили страницы А1 и А2, вернулись на главную, аутентифицировались, а потом опять зашли на страницу А1 или А2 - они возьмутся из кеша, и соответственно плагин нам не покажет что мы "зарегистрированный пользователь".
Эта проблема скорее всего браузера и его работы с кэшем. К примеру, Opera будет скорее всего нормально работать в этой ситуации. Google Chrome возьмет из кэша всю страницу. Про Firefox сказать не могу, так как не знаю.
Неактивен
Вообще проблема здесь несколько глубже. Моя цель интеграции - комментарии. Т.е. я хочу чтобы комментарии на сайте site.ru могли оставлять только зарегистрированные (на форуме) forum.site.ru пользователи. Ну и аватарка с форума естественно. По поводу проблемы с кешированием, мне кажется есть два варианта. Первый из них и самый простой, это в теле плагина указать
header("Cache-Control: no-cache");
что запретит кеширование всех страниц. Чем плох этот вариант? Повышенной нагрузкой на сервер, думаю понятно.
Второй вариант, это написать скрипт на js, который будет вызывать php скрипт отвечающий за проверку аутентификации и выдавать в нужное место его результаты. Плюсы - страницы будут кешироваться, нагрузка на сервер возрастет совсем незначительно, только за счет вызова небольшого скрипта. Из минусов - всю систему комментариев нужно будет переписывать, т.к. то что есть в этом варианте работать не будет. В случае кеширования страниц мы не сможем воспользоваться конструкцией
<txp:if_user>
Выводим форму ввода комментариев
<txp:else />
Комментарии запрещены!
<txp:if_user />
Вообще, хочу заметить что комментарии в TXP отвратительно реализованы. Система оборачивает форму и сами комментарии тегами с уже назначенными системой классами, невозможность отключить дурацкую кнопку "предпросмотр"...
P.S. А вообще, если будет открываться кешированная страничка с js кодом ***.load(/script.php); - результат работы скрипта script.php не будет кеширован? Я совсем не спец в js, поэтому и вопрос, может зря огород горожу?
Неактивен
В общем сделал я всё. Результат можно посмотреть на моем сайте Фокусы и трюки.
Тыкать в горизонтальном меню "Вход" (ну и "закрыть", после).
Немного php+ajax и все красиво
function user_if($atts,$thing) { global $phpbb_root_path, $phpEx, $user, $db, $config, $cache, $template; define('IN_PHPBB', true); $phpbb_root_path = '/usr/home/**************************'; $phpEx = 'php'; include($phpbb_root_path . 'common.php'); $user->session_begin(); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', FALSE); header('Pragma: no-cache'); global $user; return parse(Evalelse($thing, ($user->data['is_registered']))); } function user_name() { global $user; return $user->data['username']; } function user_avatar() { global $user; if($user->data['user_avatar']) return $user->data['user_avatar']; else return 'noavatar.jpg'; }
php logout
define('IN_PHPBB', true); $phpbb_root_path = '/usr/home/*****************'; $phpEx = substr(strrchr(__FILE__, '.'), 1); include($phpbb_root_path . 'common.php'); $user->session_begin(); $user = $GLOBALS['user']; $user->session_kill(); $user->session_begin(); header('location: ' . $_SERVER['HTTP_REFERER']);
php login
header('Cache-control: private'); global $phpbb_root_path, $phpEx, $user, $db, $config, $cache, $template; define('IN_PHPBB', true); $phpbb_root_path = '/usr/home/*******************'; $phpEx = 'php'; include($phpbb_root_path . 'common.php'); $user->session_begin(); $username = $_POST['name']; $password = $_POST['pwd']; ////////////////////////////////////// // обрабатываем данные в целях безопасности, каждый по своему :) ////////////////////////////////////// global $user; $user->session_kill(); $user->session_begin(); $auth->acl($user->data); $user->setup(); $result = $auth->login($username, $password); if($result['status'] == LOGIN_SUCCESS) echo 'ok'; else echo 'error';
Неактивен
Я, как посетитель сайта, порекомендовал бы Вам все таки сделать не "Закрыть", а крестик. Это просто привычнее как-то.
И в статьях, оставить информацию и ссылку, что нужна регистрация, а то новым пользователям не сразу понятно, как оставить комментарии
Неактивен
Я не стал делать регистрацию на сайте, не знаю, стоит ли?
Крестик пожалуй сделаю, спасибо за идею, itshaman
По поводу информации - да, она будет, когда один небезысвестный здесь программист допилит комментарии под мою задачу
Неактивен
Посмотрел сейчас, некуда там крестик лепить :-/
Неактивен
хм, как раз хотел спросить. спасибо)
Неактивен