Дополнительные поля в профиле

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
С 1 января 2017 года phpBB Group прекращает поддержку phpBB версии 3.0.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.0 до 1 июля 2017 года.
Подробнее: Окончание поддержки phpBB 3.0.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Amadeus
phpBB 1.0.0
Сообщения: 2
Стаж: 16 лет 11 месяцев

Дополнительное поле в профиль

Сообщение Amadeus »

Доброго времени суток!! У меня такая проблема. Мне нужно добавить в профиль пользователя дополнительное поле.Выводить его нужно и в темах и просто в профиле.Данные брать нужно из определенной таблицы. Форум у меня интегрирован с сайтом поэтому данные для авторизации он берет из базы сайта, дополнительное поле он должен брать из той же базы что и пользователя только из другого поля.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: Дополнительное поле в профиль

Сообщение rxu »

Amadeus
Не зная конкретики, единственное, что могу сказать - добавляете во viewtopic.php и memberlist.php нужные SQL запросы к нужной базе, и выводите.
Изображение
Amadeus
phpBB 1.0.0
Сообщения: 2
Стаж: 16 лет 11 месяцев

Re: Дополнительное поле в профиль

Сообщение Amadeus »

Редактировать файлы форума или темы? И как запрос должен выглядеть для каждого фала? Можно ли примерчик, а то я как то пока не особо разобраться с этим могу.А уж имена таблиц и я свои поставить смогу.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: Дополнительное поле в профиль

Сообщение rxu »

Amadeus писал(а):Редактировать файлы форума или темы?
И те, и другие.
Например, во viewtopic.php есть блок

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

$sql = $db->sql_build_query('SELECT', array(
	'SELECT'	=> 'u.*, z.friend, z.foe, p.*',

	'FROM'		=> array(
		USERS_TABLE		=> 'u',
		POSTS_TABLE		=> 'p',
	),

	'LEFT_JOIN'	=> array(
		array(
			'FROM'	=> array(ZEBRA_TABLE => 'z'),
			'ON'	=> 'z.user_id = ' . $user->data['user_id'] . ' AND z.zebra_id = p.poster_id'
		)
	),

	'WHERE'		=> $db->sql_in_set('p.post_id', $post_list) . '
		AND u.user_id = p.poster_id'
));
Добавляете еще один LEFT_JOIN с выборкой из нужной вам таблицы по нужному полю. Потом заполняете массив $user_cache (он чуть ниже) аналогично другим его значениям.
Затем передаете в шаблон так же, как и остальные значения, например

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

		'POSTER_POSTS'		=> $user_cache[$poster_id]['posts'],
Изображение
rugo
phpBB 1.0.0
Сообщения: 7
Стаж: 19 лет 5 месяцев
Откуда: Питер (Чукчино)

Re: Видимость Дополнительных полей пользователя

Сообщение rugo »

А как сделать,чтобы в стиле subsilver2 в списке пользователей был столбец,показывающий дату последнего посещения форума,ведь поле сортировки есть?Править файл memberlist_body.html или memberlist_view.html?
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 4 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Видимость Дополнительных полей пользователя

Сообщение Палыч »

rugo писал(а):Править файл memberlist_body.html
Добавить

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

	<th nowrap="nowrap" width="11%"><a href="{U_SORT_ACTIVE}#memberlist">{L_LAST_ACTIVE}</a></th>
потом

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

		<td class="gen" align="center"><!-- IF S_VIEWONLINE -->{memberrow.VISITED}<!-- ENDIF -->&nbsp;</td>
не забыть поменять (увеличить на 1) число colspan (в нескольких местах).
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
rugo
phpBB 1.0.0
Сообщения: 7
Стаж: 19 лет 5 месяцев
Откуда: Питер (Чукчино)

Re: Видимость Дополнительных полей пользователя

Сообщение rugo »

Поле появилось.Спасибо.А изменение colspan ни на что не повлияло.
Аватара пользователя
DimkaG
phpBB 1.4.4
Сообщения: 151
Стаж: 17 лет 3 месяца
Откуда: Москва
Благодарил (а): 18 раз
Поблагодарили: 2 раза

Re: Дополнительное поле в профиль

Сообщение DimkaG »

у меня попроще задача. Есть доп.поле "ID" оно отображается в профиле. Мне нужно его подключить под аватару в постах, как я понимаю - нужно менять viewtopic.php . Можно поподробнее описать какие изменения нужно делать?
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Дополнительное поле в профиль

Сообщение nissin »

Администраторский раздел -> Нагрузка на сервер -> Показывать дополнительные поля на страницах тем -> Да
Аватара пользователя
DimkaG
phpBB 1.4.4
Сообщения: 151
Стаж: 17 лет 3 месяца
Откуда: Москва
Благодарил (а): 18 раз
Поблагодарили: 2 раза

Re: Дополнительное поле в профиль

Сообщение DimkaG »

Да, именно то, что я искал! Огромное спасибо!
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Re: ПРОБЛЕМА - Дополнительные поля в профиле

Сообщение FladeX »

Как вывести одно из дополнительных полей в определенном месте viewtopic'а? Мучаюсь уже час, никак не получается...

Например, данная конструкция вообще не обрабатывается:

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

  <!-- BEGIN custom_fields -->
Подставлял туда произвольный текст - он не выводился.

Добавлено спустя 10 минут 16 секунд:
Разобрался :)

дминистраторский раздел -> Нагрузка на сервер -> Показывать дополнительные поля на страницах тем -> Да

:)

Ну и сам код:

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

				<!-- IF postrow.S_PROFILE_FIRSTNAME or postrow.S_PROFILE_SURNAME --><div class="posterrank">{postrow.PROFILE_FIRSTNAME_VALUE} {postrow.PROFILE_SURNAME_VALUE}</div><!-- ENDIF -->
где surname и firstname - идентификаторы нужных мне полей.
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
boldgambler
phpBB 1.0.0
Сообщения: 8
Стаж: 17 лет 10 месяцев

Re: ПРОБЛЕМА - Дополнительные поля в профиле

Сообщение boldgambler »

а как сделать чтобы дополнительные поля видели только члены определенной группы (название на русском но думаю тут по id как нибудь)?
хочу 2 дополнительных поля (в админке настроил их как скрытые и запрещено редактирование из личного раздела), чтобы самому их устанавливать у определенной группы (при переводе их в эту группу) и чтобы эти поля при просмотре профиля видели только члены этой группы. Сейчас как по документации, их видят только админы и модераторы. Может там условие какое и можно в него добавить еще один вариант что id группы == 7 скажем, кто знает?
boldgambler
phpBB 1.0.0
Сообщения: 8
Стаж: 17 лет 10 месяцев

Re: ПРОБЛЕМА - Дополнительные поля в профиле

Сообщение boldgambler »

покопался в коде.
насколько я понял за вывод дополнительных полей при просмотре профиля отвечает следующий код из memberlist.php

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

// Custom Profile Fields
		$profile_fields = array();
		if ($config['load_cpf_viewprofile'])
		{
			include_once($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
			$cp = new custom_profile();
			$profile_fields = $cp->generate_profile_fields_template('grab', $user_id);
			$profile_fields = (isset($profile_fields[$user_id])) ? $cp->generate_profile_fields_template('show', false, $profile_fields[$user_id]) : array();
		}
начало функции generate_profile_fields_template

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

function generate_profile_fields_template($mode, $user_id = 0, $profile_row = false)
	{
		global $db;

		if ($mode == 'grab')
		{
			if (!is_array($user_id))
			{
				$user_id = array($user_id);
			}

			if (!sizeof($this->profile_cache))
			{
				$this->build_cache();
			}
и как раз функция build_cache показывает скрытые поля, недоступные из личного раздела, только админам и модерам

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

/**
	* Build profile cache, used for display
	* @access private
	*/
function build_cache()
	{
		global $db, $user, $auth;

		$this->profile_cache = array();

		[b]// Display hidden/no_view fields for admin/moderator[/b]
		$sql = 'SELECT l.*, f.*
			FROM ' . PROFILE_LANG_TABLE . ' l, ' . PROFILE_FIELDS_TABLE . ' f
			WHERE l.lang_id = ' . $user->get_iso_lang_id() . '
				AND f.field_active = 1 ' .
				((!$auth->acl_gets('a_', 'm_') && !$auth->acl_getf_global('m_')) ? '	AND f.field_hide = 0 ' : '') . '
				AND f.field_no_view = 0
				AND l.field_id = f.field_id
			ORDER BY f.field_order';
		$result = $db->sql_query($sql);

		while ($row = $db->sql_fetchrow($result))
		{
			$this->profile_cache[$row['field_ident']] = $row;
		}
		$db->sql_freeresult($result);
	}
я так понимаю надо что-то поправить в этом запросе

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

$sql = 'SELECT l.*, f.*
			FROM ' . PROFILE_LANG_TABLE . ' l, ' . PROFILE_FIELDS_TABLE . ' f
			WHERE l.lang_id = ' . $user->get_iso_lang_id() . '
				AND f.field_active = 1 ' .
				((!$auth->acl_gets('a_', 'm_') && !$auth->acl_getf_global('m_')) ? '	AND f.field_hide = 0 ' : '') . '
				AND f.field_no_view = 0
				AND l.field_id = f.field_id
			ORDER BY f.field_order';
тут как я понял 'a_', 'm_' и есть проверка на то модер или админ ты. Вот бы еще добавить сюда условие что типа "Админ или Модер или id одной из твоих группы такое то! (ну то есть пользователь входит в указанную группу)"
думаю я получил бы нужный мне эффект. не мог бы кто помочь встроить это в запрос? в php я не слишком силен.

Добавлено спустя 56 минут 45 секунд:
короче, люди ... нужно просто условие принадлежит пользователь к группе с заданным id или нет.

Добавлено спустя 1 час 32 минуты 16 секунд:
всем огромное спасибо за помощь! Она была просто бесценна! :mrgreen:

решил так:
перед формированием запроса вставил (нашел в одной статье про блокирование рекламы)

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

$sql_mygr = "select count(*) as 'count' from " . USER_GROUP_TABLE . " a INNER join " . GROUPS_TABLE . " b on a.group_id=b.group_id where a.user_id=" . intval ( $user -> data [ 'user_id' ]). " and b.group_id=7" ;
		$result_mygr = $db -> sql_query ( $sql_mygr );
		$row_mygr = $db -> sql_fetchrow ( $result_mygr );
		$db -> sql_freeresult ( $result );
и в условие добавил проверку, и в итоге получил

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

(!$auth->acl_gets('a_') && !($row_mygr [ 'count' ]> 0) ? '	AND f.field_hide = 0 ' : '') . '
правда я выкинул модераторов из права просмотра, но это частность.
еще раз убедился в оригинальной поддержке этого форума :lol:
kostyanet
phpBB 1.0.0
Сообщения: 1
Стаж: 16 лет 8 месяцев

Re: ПРОБЛЕМА - Дополнительные поля в профиле

Сообщение kostyanet »

Продолжение из закрытой темы: http://www.phpbbguru.net/community/topic27811.html

Понятно. Короче все равно не пашет. И главное я не врубаюсь чего менять:

memberrow.PROFILE_FIELD1_VALUE - это же название переменной. Если я просто заменю FIELD1 на, например garden_name (название доп.поля) то будет memberrow.PROFILE_garden_name_VALUE Правильно? То есть скрипт где-то создает именно такую переменную, или как это узнать?

В общем сделал memberrow.PROFILE_garden_name_VALUE - не отображается.

В условии поменял - не отображается. Но ведь количество заголовков остается прежним. Вот последний:

<th nowrap="nowrap" width="11%"><a href="{U_SORT_WEBSITE}">{L_WEBSITE}</a></th>

Добавлено спустя 20 минут 27 секунд:
Тэкс, поле теперь выводятся, оказывается надо было большими буквами писать. А может быть оказывается надо было кэш форума почистить.

Короче заголовка нет. Попробовал просто забить название вместо WWW - кириллица не прокатывает из исходника. Придется искать еще...
Аватара пользователя
Izya
Former team member
Сообщения: 408
Стаж: 18 лет
Откуда: Абакан, Сибирь
Благодарил (а): 1 раз
Поблагодарили: 28 раз

Re: ПРОБЛЕМА - Дополнительные поля в профиле

Сообщение Izya »

kostyanet писал(а):кириллица не прокатывает
А кодировка файла UTF-8?
Изображение

Вернуться в «Поддержка phpBB 3.0.х»