[FAQ] Интеграция входа на конференцию phpBB с сайтом

Темы по наиболее часто задаваемым вопросам без привязки к версии phpBB. Читать в первую очередь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB 3.1.x/3.2.x/3.3.x | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16947
Стаж: 18 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 549 раз
Поблагодарили: 1700 раз

[FAQ] Интеграция входа на конференцию phpBB с сайтом

Сообщение rxu »

Ниже приведен пример скрипта с интегрированной формой входа на конференцию (общего вида).
В приведённом примере папка, в которой находится скрипт, находится на один уровень выше папки конференции. Файлы конференции находятся в папке phpBB3 относительно скрипта.

По коду скрипта имеются пояснительные комментарии (на английском языке).

Вопросы принимаются в этой теме.

Версия 1.1.0 с интегрированным списком онлайн и легендой групп здесь.
Версия 1.2.0 с аватарой здесь.

Версия 2.0.1 для phpBB 3.2/3.3 здесь.

login_1.0.5.zip
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось rxu 22.05.2020 8:37, всего редактировалось 6 раз.
Изображение
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16947
Стаж: 18 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 549 раз
Поблагодарили: 1700 раз

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение rxu »

В принципе исправить можно так. Формат вызова функции имеет вид

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

get_username_string($mode, $user_id, $username, $username_colour = '', $guest_username = false, $custom_profile_url = false)
Измените формат вызова в скрипте, например так

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

get_username_string('full', $user->data['user_id'], $user->data['username'], $user->data['user_colour'], $user->data['username'], 'http://forum.site.ru/memberlist.php?mode=viewprofile');
Изображение
p-vasya
phpBB 1.2.1
Сообщения: 20
Стаж: 16 лет 10 месяцев

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение p-vasya »

rxu
Огромное спасибо, это именно то что нужно.


Сейчас начал собирать всё и переносить на хостинг, и тут вылезла большая задница.
В моём скрипте кусочки текста(кирилица) обрабатываются регекспами. Для корректной работы регексп с кирилицей на хостинге(мастерхост) в начале скрипта прописываю(setlocale(LC_ALL, 'ru_RU.CP1251');) и всё работало...но, как только подвешиваю туду код скрипта авторизации, то всё, сразу регекспы начинают косячить и на выходе я получаю иероглиыфы :(
Уже перепробовал всё и локали менял и кодировку пробовал менять и кодировку моих таблиц сменил(раньше были cp1251, теперь сменил на utf-8), ничего пока не помогло :(
Стот убрать то что относится к phpBB, сразу всё становится на свои места.
Подскажите, пожалуйста, как исправить ошибки?
p-vasya
phpBB 1.2.1
Сообщения: 20
Стаж: 16 лет 10 месяцев

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение p-vasya »

Эксперементы показали, что косяк происходит из-того, что раньше мой скрипт был сохранён в ANSI, а при подключении авторизации phpbb, я его пересохранил в UTF-8(без BOM), но увы, проблема, как была так она и осталась и связана она именно с phpbb, хоть и косвенно :(
1)Скажите пожалуйста, а как же тогда phpbb адекватно работает с кирилицей? В чём фишка?
2)А можно ли тот скрипт в котором я подключаю авторизацию, оставить в ANSI или UTF-8(без BOM) это обязательно для всех скриптов, которые хоть краем соприкасаются с phpbb?

Заранее спасибо за ответы!
Аватара пользователя
Rayden
Former team member
Сообщения: 3739
Стаж: 19 лет 10 месяцев
Поблагодарили: 3 раза

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение Rayden »

ANSI и UTF-8 для английского алфавита - одно и тоже.
Непонятен вопрос - что значит "как же тогда"? Берет и работает. В ютф
Никаких ru_RU.CP1251 не поддерживается.
phpBB2 FAQ
phpBB3 FAQ
Аватара пользователя
Xandir
phpBB 1.0.0
Сообщения: 8
Стаж: 15 лет 10 месяцев

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение Xandir »

Как сделать чтобы при успешной авторизации с сайта, кроме аватара и имени пользователя отображалось еще и колличество новых личных сообщений, и при нажатии на эту строку открывался раздел "личные сообщения" на форуме.
p-vasya
phpBB 1.2.1
Сообщения: 20
Стаж: 16 лет 10 месяцев

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение p-vasya »

Rayden писал(а):ANSI и UTF-8 для английского алфавита - одно и тоже.
Проблема именно с кирилицей.
Rayden писал(а): В ютф Никаких ru_RU.CP1251 не поддерживается.
У мастерхост в доках написано, что нужно использовать эту локаль, тогда ф-ции работы со строками будут работать правильно, но у них ничего не сказано про слуйчий, когда используется utf.

Rayden писал(а): Непонятен вопрос - что значит "как же тогда"? Берет и работает.
Думаю хоть где-то phpbb точно должен использовать регекспы, правильно? Вот у меня и вопрос, что они(разработчики phpbb) сделали, чтобы при сохранении в ютф регекспы(да и другие функции работы со строками) работали правильно?

Приведу пример не правильной работы:
Вот скрипт:

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

<?php

setlocale(LC_ALL, 'ru_RU.CP1251');

echo strtoupper('Работает!');

?> 
Если я сохраняю этот скрипт, в ANSI, то всё работает правильно, но мне необходимо сохранить скрипт в UTF-8(без BOM) и тут начинаются проблемы...Вместо "РАБОТАЕТ!", скрипт выдаёт "Рабнтает!", что явно неправильно.

Если я уберу

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

setlocale(LC_ALL, 'ru_RU.CP1251');
, то оба скрипта выдают "Работает!", что тоже не верно :(

Что я только не пробовал, ни в какю не хочет работать. Но phpbb в этих же условия работает, правльно? Вот я и спрашиваю, в чём причина, как phpbb умудряется корректно обрабатывать кирилицу?
Аватара пользователя
Rayden
Former team member
Сообщения: 3739
Стаж: 19 лет 10 месяцев
Поблагодарили: 3 раза

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение Rayden »

Ты русский язык понимаешь?
Только ютф и никаких 1251 локалей.

Естественно, что у тебя нихрена не работает, если сам крипт в ютф, а локаль выставляешь 1251.

p-vasya писал(а):Если я уберу
...
то оба скрипта выдают "Работает!", что тоже не верно :(
С чего такие дурные выводы?
Наоборот, в данном случае все верно, все работает в ютф.
phpBB2 FAQ
phpBB3 FAQ
p-vasya
phpBB 1.2.1
Сообщения: 20
Стаж: 16 лет 10 месяцев

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение p-vasya »

Rayden писал(а):Ты русский язык понимаешь?
Только ютф и никаких 1251 локалей.

Естественно, что у тебя нихрена не работает, если сам крипт в ютф, а локаль выставляешь 1251.
Логично, именно поэтому следом я её убрал ,что тоже не совсм решило проблему.

Rayden писал(а):С чего такие дурные выводы?
Наоборот, в данном случае все верно, все работает в ютф.
Как с чего, смотрю на код и результат, вижу, что не то что я хотел.

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

echo strtoupper('Работает!');
Этот код должен выдавать в результате: "РАБОТАЕТ!", а после того, как я убираю локаль, он выдаёт: "Работает". Вы считаете, что это правильная работа?
Пример второй:
preg_match_all("/\d*?(\w+)\d*?/", $text, $parse);

Сохраняю в UTF-8:
Скармливаю текст, возвращает пустой массив.

Сохраняю в ANSI:
Скармливаю тот же самый текст, получаю на выходе массив слов.


Что здесь не правильно? МОжет я где туплю?
Аватара пользователя
Rayden
Former team member
Сообщения: 3739
Стаж: 19 лет 10 месяцев
Поблагодарили: 3 раза

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение Rayden »

Какое отношение твое обучение php имеет к данной теме?
phpBB2 FAQ
phpBB3 FAQ
p-vasya
phpBB 1.2.1
Сообщения: 20
Стаж: 16 лет 10 месяцев

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение p-vasya »

Rayden писал(а):Какое отношение твое обучение php имеет к данной теме?
Причём здесь обучение пхп? Мой скрипт без phpBB, работает и нареканий я к нему не имею.
Но как не крути, мой скрипт и phpBB мне подружить надо.

Если вы видите или знаете где именно я туплю/допускаю ошибку, почему бы об этом не сказать? Ведь тогда моментально решаться все проблемы и не нужно будет дальше продолжать спор.

1)Что я делаю не так? Как можно исправить ошибку?

2)Так же без ответа остался вопрос, можно ли мой скрипт, в котором будет встроена авторизация phpBB сохранить в ansi?
Аватара пользователя
Rayden
Former team member
Сообщения: 3739
Стаж: 19 лет 10 месяцев
Поблагодарили: 3 раза

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение Rayden »

1. Научи свой скрипт нормально работать с ютф, пока же он видимо этого не умеет.
2. можно, если не будешь использовать русский язык.

Ты вообще какой-то нерусский. Третий раз тебе говорю - форум работает ТОЛЬКО в ютф.
ANSI - это только английский язык.
1251 - это тот же ansi, но в котором добавлены однобайтовые русские символы.
ютф - совпадает по английским символам с ansi, но русские символы там имеют совершенно другие коды.

Поэтому когда у тебя только английский текст, пофиг в какой кодировке сохранять.

Ты тупишь со своими кодировками. А вопрос "как php работает с utf " тут не по теме. Зайди на php.net и почитай об особенностях функций php при обработке многобайтовых кодировок.
Например strtoupper не умеет нормально работать с многобайтовыми кодировками, для этого есть mb_strtoupper

Поэтому я и говорю - твое обучение php для этой темы оффтопик. А то, что ты не знаешь элементарного - различия кодировок и мультибайтных аналогов функций в php и выдает тебя как чайника.
phpBB2 FAQ
phpBB3 FAQ
p-vasya
phpBB 1.2.1
Сообщения: 20
Стаж: 16 лет 10 месяцев

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение p-vasya »

Всё, научил, всё заработало, спасибо.
Аватара пользователя
Xandir
phpBB 1.0.0
Сообщения: 8
Стаж: 15 лет 10 месяцев

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение Xandir »

Как сделать чтобы при успешной авторизации с сайта, кроме аватара и имени пользователя отображалось еще и колличество новых личных сообщений, и при нажатии на эту строку открывался раздел "личные сообщения" на форуме?
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16947
Стаж: 18 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 549 раз
Поблагодарили: 1700 раз

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение rxu »

Xandir
Вы упорно копируете один и тот же вопрос уже в третий или пятый раз. :)
Во-первых, к теме он вообще не относится, по большому счету.
Во-вторых, для этого надо выдрать скрипт из функции page_header в includes/functions.php, пока времени на это нет.

Вкратце

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

	$l_privmsgs_text = $l_privmsgs_text_unread = '';
	$s_privmsg_new = false;

	// Obtain number of new private messages if user is logged in
	if (!empty($user->data['is_registered']))
	{
		if ($user->data['user_new_privmsg'])
		{
			$l_message_new = ($user->data['user_new_privmsg'] == 1) ? $user->lang['NEW_PM'] : $user->lang['NEW_PMS'];
			$l_privmsgs_text = sprintf($l_message_new, $user->data['user_new_privmsg']);

			if (!$user->data['user_last_privmsg'] || $user->data['user_last_privmsg'] > $user->data['session_last_visit'])
			{
				$sql = 'UPDATE ' . USERS_TABLE . '
					SET user_last_privmsg = ' . $user->data['session_last_visit'] . '
					WHERE user_id = ' . $user->data['user_id'];
				$db->sql_query($sql);

				$s_privmsg_new = true;
			}
			else
			{
				$s_privmsg_new = false;
			}
		}
		else
		{
			$l_privmsgs_text = $user->lang['NO_NEW_PM'];
			$s_privmsg_new = false;
		}

		$l_privmsgs_text_unread = '';

		if ($user->data['user_unread_privmsg'] && $user->data['user_unread_privmsg'] != $user->data['user_new_privmsg'])
		{
			$l_message_unread = ($user->data['user_unread_privmsg'] == 1) ? $user->lang['UNREAD_PM'] : $user->lang['UNREAD_PMS'];
			$l_privmsgs_text_unread = sprintf($l_message_unread, $user->data['user_unread_privmsg']);
		}
	}
Потом передаете переменную l_privmsgs_text_unread в шаблон или используете как есть в скрипте. Ссылка генерируется так

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

append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox');
Разбирайтесь ;)
Изображение
Аватара пользователя
Xandir
phpBB 1.0.0
Сообщения: 8
Стаж: 15 лет 10 месяцев

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение Xandir »

Спасибо огромное за помощь! Всё получилось! Только вот что-то ссылки не генерируются той функцией и я сделал прямые ссылки на форум. Немножко не правильно но всё работает :-)

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

$l_privmsgs_text = $l_privmsgs_text_unread = '';
if (!empty($user->data['is_registered']))
{
	if ($user->data['user_new_privmsg'])
	{
		$l_message_new = ($user->data['user_new_privmsg'] == 1) ? $user->lang['NEW_PM'] : $user->lang['NEW_PMS'];
		$l_privmsgs_text = sprintf($l_message_new, $user->data['user_new_privmsg']);
	}
	else
	{
		$l_privmsgs_text = $user->lang['NO_NEW_PM'];
	}
	$l_privmsgs_text_unread = '';
	if ($user->data['user_unread_privmsg'] && $user->data['user_unread_privmsg'] != $user->data['user_new_privmsg'])
	{
		$l_message_unread = ($user->data['user_unread_privmsg'] == 1) ? $user->lang['UNREAD_PM'] : $user->lang['UNREAD_PMS'];
		$l_privmsgs_text_unread = sprintf($l_message_unread, $user->data['user_unread_privmsg']);
	}
}

echo '<a href="/forum/ucp.php">Личный раздел</a>';
echo '<br><br>';
echo '<a href="/forum/ucp.php?i=pm&folder=inbox">' . $l_privmsgs_text . '</a>';
echo '<br><br>';
echo $l_privmsgs_text_unread;
Перенесено из форума FAQ (phpBB 3.0.x) в форум FAQ 28.09.2016 15:02 модератором rxu

Вернуться в «FAQ»