Решил создать по этому поводу отдельную тему, потому что думаю, что многие этим могут заинтересоваться. Человек, который создавал эту тему задавал вопрос: "Как сделать, чтобы при залогинивании сайта все сообщения в форуме не помечались, как прочитанные?". На этот вопрос, к сожалению, исчерпывающего ответа получено не было. Но из-за этой фигни появляется еще одна бага: не работает подписка на темы.
Можно узнать, как это лучше и проще реализовать?
Один вариант был предложен: ввести еще одну дату (дату захода на сайт). Или может можно просто взять login.php, скопировать его например login_site.php и там вообще убрать параметр который отвечает за время входа.
Подскажите, пожалуйста.
Вот сам сайт: http://biketrials.ru
А вот эти два скрипта, которые я использую.
Кстати потом еще есть идея переписать все это дело через http_request.
у меня такая проблема, хочу сделать что бы логин на сайте брался с форума, т.е. у меня на главной странице есть поля для ввода логина и пароля, чекбокс запомнить пароль и кнопочка вход , логин и пас должны обрабатываться login.php форума и возвращать меня потом на главную страницу сайта а не форума. регистрацию я таким образом уже сделал, а вот с входом пока не разобрался... может кто нить подскажет, идеи какие нить?
Кстати, Kelkos, будет желание обсудить этот вопрос стукни в асю 170-939-907, я в инвизе, так что стучи
Вернуться к началу
На самом деле вопрос куда шире, чем он может показаться на первый взгляд.
Возникают такие ситуации:
1 - пользователь уже зарегинен и просто вышел на сайт с форума.
2 - пользователь зарегинен был ранее и его данные прописанны в куках.
3 - пользователь гость вышел на сайт с форума
4 - пользователь гость пока ещё не входил на форум
5 - для форумного скрипта "Кто на сайте" будет совсем не понятна страница, которую сейчас просматривают пользователи.
----------------
Возможные решения:
1 - писать самому обработчик форумных сессий и регистрации
2 - использовать форумные классы регистрации.
3 - помудрить с файлом index.php в форуме.. хех..
----------------
вариант 3 самый простой.. но тут возникае пара вопросов.. лана.. попробую чтонить сделать а там посмотрим.
--------------------------------------------------------------------------------
тут еще понимаешь в чем дело, одногрупник мой эту фигню реализовал, тока вот в чем траблы то:
во первых, реализация такая же как на форуме, т.е. если зарегался, то кусками страница погружается из тэмплэйтов помоему
во вторых, такая реализация мя не устраивает, т.к. мне, грубо говоря, нужно что бы мне возвращалась переменная типа зашел/не зашел, а потом если зашел мона все из сессий читать
с регистрацией было легче, но все равно вечер убил а надо было всего навсего ввести лишнюю переменную для usercp_register.php, чисто для редиректа на главную страницу сайта.
вот хочу тоже самое и с логин пхп сделать... лан, буду думать
--------------------------------------------------------------------------------
Мдя.. задачка не из лёгких.
Вообщем, есть вот такое решение: вызов классов из форума с последующей обработкой результатов.
Замеченные мною баги:
1 - иногда возникает потеря sid форумной сесиий, поэтому на ссылках, после которых она пропадает, надо ставить пхп код (см. ниже)
2 - иногда возникает ошибка при не заданном sid (каждый переход по ссылке без указанногго sid будет создавать новую гостевую сессию).
3 - неправильная отработка редиректа из формы "Вход". Нее.. если пользователь ввёл свои данные сразу правильно, то всё и отрабатывает правильно.. но вот после второй попытки теряются переменные в строке редиректа. И из сообщения о неудачной регистрации нет выхода по редиректу.. т.е. пока пользователь не введёт правильные данные он не попадёт на сайт из этого окна.. И приходится выходить на форум, а только потом на сайт.. Но это уже разрабы форума намудрили, паразиты.
4 - не работает так, как хочется ссылка выход. (по идее пользователь должен выходить на туже страницу на которой нажал "Выход", но разрабы учудили и в итоге редирект при выходе вообще не работает.. поэтому при выходе пользователь попадает к списку форумов.)
5 - размер "съедаемой" скриптом памяти при выполнении увеличился на 10кб.. + увеличилось время отработки (у кого перегруженный хостинг лучше так не делать), ведь приходится инициализировать несколько классов форума, а они грузать всю форумную бодягу в память.. отнимается время на их выполнение и память на загрузку кучи ненужной нам инфы.
----------
Что получилось из плюсов.. Хм..
1 - достаточно просто наладить
2 - мало "самопального" кода, который наверняка работалбы не по тем алгоритмам, что форум.
3 - получение любой инфы по форуму. (системные значения, пользовательские значения, стили и пр. фигня)
И так.
Шаг 1
Создаём файл (не важно где, но по умолчанию в корне сайта) forum_init.php содержащий следующий код:
Код:
<?
define('IN_PHPBB', true); //признак того, что запускался инициализатор
include($phpbb_root_path . 'extension.inc'); //загрузка типа расширения скриптов
include($phpbb_root_path . 'common.'.$phpEx); //загрузка системных переменных и основных классов
//грузим форумный обработчик сессий
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//данные по пользователю возвращаются из обработчика в $GLOBALS['userdata']
$user_data=$GLOBALS['userdata'];
$sid=$user_data['session_id']; //номер форумной сессии.
?>
Это наш скрипт инициализации форума. Вся фишка тут в том, что этот скрипт должен инклюдится в нужный скрипт В САМОМ НАЧАЛЕ!. Если перед ним будет хоть что то выведенно пользователю, то он выдаст ошибку и отвалится.
Т.е. если мы сделаем типа так:Код:
<?
$phpbb_root_path = 'forum/'; //путь от выполняемого скрипта в каталог форума (от корня сайта будет forum/)
include ('forum_init.php');
?>
<html>
<head>
<title>Сайт</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
......
текст сайта
......
То он будет работать, но если мы хоть что то напишем перед загрузкой инициализатора (forum_init.php), то получим фигу с маслом. Почему так происходит? хм.. долго объяснять.. (для особо любопытных советую поискать в инете инфу о headers)
Так.. дальше..
Шаг 2
Создаём файл user_window.php тамже где предыдущий файл. Код файла:
Код:
<?
//скрипт в окошко пользователя
//работает с масссивом $user_data который передаётся из forum_init.php
//$phpbb_root_path - каталог форума от корня сайта
//подготаливаем адрес редиректа (редирект будет ../) т.е. на каталог выше форума на скрипт с которого вызвали регистрацию с сохранением
$redirect='..'.$_SERVER['PHP_SELF'];
if ($_SERVER['QUERY_STRING']<>'') $redirect.='?'.$_SERVER['QUERY_STRING'];
if ($user_data['user_id']==-1)
{
//этот пользователь гость.. выводим вариант окошка для гостя
?><form method="post" action="<?=$phpbb_root_path ?>login.php?sid=<?=$sid ?>">
<input name="redirect" type="hidden" value="<?=$redirect ?>">
Имя:<input type="text" name="username" size="10" /><br>
Пароль:<input type="password" name="password" size="10" maxlength="32" /><br>
Автоматически входить при каждом посещении:<input type="checkbox" name="autologin" /><br>
<input type="submit" name="login" value="Вход" /><br>
<a href="/<?=$phpbb_root_path ?>index.php">Вход на форум</a>
</form>
<?
}
else
{
?>
Добро пожаловать <?=$user_data['username'] ?><br>
<?
if ($user_data['user_avatar']<>'')
{
//у пользователя есть аватар
//показываем аватар пользователя. Параметры user_avatar_type и user_avatar
//аватры бывают 2-х типов
// 1 - загруженные на форум в папку /forum/images/avatars/
// 2 - в виде ссылки с другого сайта типа http://othersite.ru/pic.jpg
if ($user_data['user_avatar_type']==1) echo '<img src="/'.$phpbb_root_path.'images/avatars/'.$user_data['user_avatar'].'" border="0" >';
else echo '<img src="'.$user_data['user_avatar'].'" border="0" >';
}
?>
<br>
Ваш последний визит был <?=date ($user_data['user_dateformat'] , $user_data['user_lastvisit']) ?><br>
<a href="/<?=$phpbb_root_path ?>privmsg.php?folder=inbox&sid=<?=$sid ?>">Личные сообщения ( <?=$user_data['user_new_privmsg'] ?> новых )</a><br>
<a href="/<?=$phpbb_root_path ?>login.php?logout=true&sid=<?=$sid ?>">Выход</a><br>
<?
}
?>
Этот файл наша форма для регистрации, а также если пользователь уже зарегинен, то в ней пишется его инфа. Этот файл должен инклюдится в то место сайта,в котором всё это должно быть. Но обязательное условие - в начале скрипта в который инклюдим user_window.php должен вставляться скрипт инициализации (см.выше)
Ну а теперь небольшой пример использования. Создаём файл test.php в котром пишем примерно следующий код:Код:
<?
//тест работы
$phpbb_root_path = 'forum/'; //путь от выполняемого скрипта в каталог форума (от корня сайта будет forum/)
include ('forum_init.php'); //загрузка инициализатора
?>
<table width="100%" border="1">
<tr>
<td width="20%"><? include ('user_window.php'); // выводим рег.форму или инфу пользователя ?></td>
<td width="80%">
<a href="/test.php?f=1">Link1</a><br>
<a href="/test.php?f=2">Link2</a><br>
<a href="/test.php?f=3">Link3</a><br>
</td>
</tr>
</table>
Вот, собственно и всё..
Теперь небольшие замечания:
$phpbb_root_path - это переменная выставляется до скрипта инициализации и означает путь в каталог форума ОТ ВЫПОНЯЕМОГО СКРИПТА (т.е. в который инклюдится наш инициализатор).
$sid - номер сесии пользователя. В некотрых случаях его надо насильно задавать в параметрах ссылок.. иначе он будет теряться. Пример его применения можно иногда видеть на форуме.. к всем ссылкам прилеплен &sid=edfhgu4754j354545vfddfd.. Если у вас вдруг на сайте появилась ссылка, при нажатии на которую пользователь вдруг становится гостем - значит в неё надо прописать что то вроде как в примере
Код:
<a href="/test.php?f=3&sid=<?=$sid ?>">Link</a>
$user_data - содержит ещё много чего интересного.. что бы посмотреть всю инфу по пользователю напишите такой код в конце файла user_window.php:
Код:
<?
echo '<pre>';
print_r ($user_data);
echo '</pre>';
?>
хех.. есть ещё несколько интересных массивов от форума.. все их можно отследить в суперглобальном массиве $GLOBALS ..
Ну вот собственно и всё.
Вернуться к началу
-MS-
Гость
Добавлено: Чт Фев 24, 2005 2:41 pm Заголовок сообщения:
--------------------------------------------------------------------------------
Спасибо большое, буду пробовать, потом обязательно расскажу как работает
Вернуться к началу
-MS-
Гость
Добавлено: Чт Фев 24, 2005 9:25 pm Заголовок сообщения:
--------------------------------------------------------------------------------
Спасибо, все работает
а на счет выхода можно сделать так:
"Выход" ссылается на главную index.php?mode=logout
в конце forum_init.php вставляем код:
$mode=$_GET['mode'];
if ($mode=='logout'){
session_end($userdata['session_id'], $userdata['user_id']);
$redirect='..'.$_SERVER['PHP_SELF'];
Header("Location:$redirect");
exit;
}
Вернуться к началу
Kelkos
Site Admin
Зарегистрирован: 01.11.2004
Сообщения: 13
Добавлено: Чт Фев 24, 2005 10:14 pm Заголовок сообщения:
--------------------------------------------------------------------------------
Ну вот.. самиже можете.. когда хочете. Но по идее редирект должен обрабатываться в скрипте login.php.. но чую я, что всё это "в следующей серии"..
С приведённым тобой скриптом можно ещё поработать прилепив туда доп.переменую для редлиректа на нужную страницу..
Код:
"Выход" ссылается на главную index.php?mode=logout&redirect=<?=$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'] ?>
Всё это нужно чтобы не терять раметры страници при выходе. Если адрес страницы примерно такого вида page.php?a=3&f=3
Код:
$mode=$_GET['mode'];
if ($mode=='logout'){
session_end($userdata['session_id'], $userdata['user_id']);
$redirect=$_GET['redirect'];
if ($redirect=='') $redirect=$_SERVER['PHP_SELF'];
Header("Location:$redirect");
exit;
}
хех. то, что написал не тестил.. но авось заработает..