Статус пользователя в виде картинки 32х32 возле лычки.

 • Просмотры: 1461
Vo
VoVZiK13
Откуда: Краснодар
Благодарил (а): 6 раз
Поблагодарили: 3 раза
Сообщения: 66
Зарегистрирован: 23 янв 2011, 17:52
Сообщение

Статус пользователя в виде картинки 32х32 возле лычки.

27 янв 2011, 19:17

Постараюсь более полно описать что я хочу и что уже смог сделать.
Задача:
Хочу сделать статусы в виде картинок 32х32 рядом с Лычкой группы.
Подобная функция была реализована Тетриком через дополнительные поля в профиле. НО много очевидных минусов
1. Пользователь видит это поле у себя в личном разделе (Нужно чтоб был отдельный модуль который можно скрыть, это я решил)
2. Файл должен называться точно также как и статус, и подсказка всплывающая тоже берётся из того поля.
итд.
Моё решение (скорей всего не правильно, так как работает не правильно):
Добавил Два поля в html "acp_users_profile.html"

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

<fieldset>
	
	<legend>{L_USER_STATUS_REMOTE}</legend>
	<dl>
		<dt><label for="pf_statusesis_1">{L_STATUS_PUT}:</label><br /><span>{L_STATUS_PUT_EXPLAIN}</span></dt>
		<dd><input type="text" id="pf_statusesis_1" name="pf_statusesis_1" value="{PF_STATUSESIS_1}" /></dd>
	</dl>
	<dl>
		<dt><label for="pf_statusesis_inf">{L_STATUS_INF}:</label><br /><span>{L_STATUS_INF_EXPLAIN}</span></dt>
		<dd><input type="text" id="pf_statusesis_inf" name="pf_statusesis_inf" value="{PF_STATUSESIS_INF}" /></dd>
	</dl>
	</fieldset>
Добавил строку в \includes\ucp\info\ucp_profile.php

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

'status'	=> array('title' => 'UCP_PROFILE_STATUS', 'auth' => '', 'cat' => array('UCP_PROFILE')),
Создал html файл назвал ucp_profile_status.html и расположил в \styles\...\template

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

<!-- INCLUDE ucp_header.html -->

<form id="ucp" method="post" action="{S_UCP_ACTION}"{S_FORM_ENCTYPE}>

<h2>{L_TITLE}</h2>

<div class="panel">
	<div class="inner"><span class="corners-top"><span></span></span>
	<p>{L_PROFILE_INFO_STATUS}</p>

	<fieldset>
	<dl>
		<dt><label for="pf_statusesis_1">{L_STATUS_PUT}:</label></dt>
		<dd><input type="text" id="pf_statusesis_1" name="pf_statusesis_1" value="{PF_STATUSESIS_1}" /></dd>
	</dl>
	<dl>
		<dt><label for="pf_statusesis_inf">{L_STATUS_INF}:</label></dt>
		<dd><input type="text" id="pf_statusesis_inf" name="pf_statusesis_inf" value="{PF_STATUSESIS_INF}" /></dd>
	</dl>
	</fieldset>

</div>

<fieldset class="submit-buttons">
	<dl>
	{S_HIDDEN_FIELDS}<input type="reset" value="{L_RESET}" name="reset" class="button2" />&nbsp; 
	<input type="submit" name="submit" value="{L_SUBMIT}" class="button1" />
	{S_FORM_TOKEN}
	</dl>
</fieldset>
</form>

<!-- INCLUDE ucp_footer.html -->
В администраторском разделе в СИСТЕМА -> Личный раздел. Создал модуль в котором указана мою созданная новая форма.

Отредактировал два php файла acp_users.php и ucp_profile.php
в acp_users.php добавлял две строчки в case 'profile': в каждую обработку

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

'pf_statusesis_1'		=> request_var('pf_statusesis_1', $user_row['pf_statusesis_1']),
'pf_statusesis_inf'		=> request_var('pf_statusesis_inf', $user_row['pf_statusesis_inf']),

'pf_statusesis_1'		=> array('string', true, 2, 500),
'pf_statusesis_inf'		=> array('string', true, 2, 500),

'pf_statusesis_1'	=> $data['pf_statusesis_1'],
'pf_statusesis_inf'	=> $data['pf_statusesis_inf'],

'PF_STATUSESIS_1'		=> $data['pf_statusesis_1'],
'PF_STATUSESIS_INF'		=> $data['pf_statusesis_inf'],
В ucp_profile.php добавил полностью новую обработку

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

			case 'status':

				include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);

				$cp = new custom_profile();

				$cp_data = $cp_error = array();

				$data = array(
					'pf_statusesis_1'		=> utf8_normalize_nfc(request_var('pf_statusesis_1', $user->data['pf_statusesis_1'], true)),
					'pf_statusesis_inf'		=> utf8_normalize_nfc(request_var('pf_statusesis_inf', $user->data['pf_statusesis_inf'], true)),
				);

				add_form_key('ucp_profile_info');

				if ($submit)
				{
					$validate_array = array(
						'pf_statusesis_1'		=> array('string', true, 2, 500),
						'pf_statusesis_inf'		=> array('string', true, 2, 500),
					);

					$error = validate_data($data, $validate_array);

					// validate custom profile fields
					$cp->submit_cp_field('profile', $user->get_iso_lang_id(), $cp_data, $cp_error);

					if (sizeof($cp_error))
					{
						$error = array_merge($error, $cp_error);
					}

					if (!check_form_key('ucp_profile_info'))
					{
						$error[] = 'FORM_INVALID';
					}

					if (!sizeof($error))
					{
						$data['notify'] = $user->data['user_notify_type'];

						if ($data['notify'] == NOTIFY_IM && (!$config['jab_enable'] || !$data['jabber'] || !@extension_loaded('xml')))
						{
							// User has not filled in a jabber address (Or one of the modules is disabled or jabber is disabled)
							// Disable notify by Jabber now for this user.
							$data['notify'] = NOTIFY_EMAIL;
						}

						$sql_ary = array(
							'pf_statusesis_1'	=> $data['pf_statusesis_1'],
							'pf_statusesis_inf'	=> $data['pf_statusesis_inf'],
						);

						$sql = 'UPDATE ' . USERS_TABLE . '
							SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
							WHERE user_id = ' . $user->data['user_id'];
						$db->sql_query($sql);


					}

					// Replace "error" strings with their real, localised form
					$error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
				}

				$template->assign_vars(array(
					'ERROR'		=> (sizeof($error)) ? implode('<br />', $error) : '',

					'PF_STATUSESIS_1'	=> $data['pf_statusesis_1'],
					'PF_STATUSESIS_INF'	=> $data['pf_statusesis_inf'],
				));

				// Get additional profile fields and assign them to the template block var 'profile_fields'
				$user->get_profile_fields($user->data['user_id']);

				$cp->generate_profile_fields('profile', $user->get_iso_lang_id());

			break;
Добавил два столбца в таблице БД phpbbc_users столбцы pf_statusesis_1 и pf_statusesis_inf

Всё замечательно данные заносятся и отображаются и в админ разделе и в личном разделе. И вот тут я столкнулся с непреодолимой для меня проблемой. В файле viewtopic_tracker_body.html и viewtopic_body.html было прописано
<img src="{T_IMAGESET_PATH}/group/{postrow.PROFILE_STATUSESIS_VALUE}1.png" alt="" title="Статус: {postrow.PROFILE_STATUSESIS_VALUE}" /> что означало что берётся то что прописано в дополнительном поле профиля пользователя.
Как так? Мой мозг не может это переварить! Откуда это значение берётся? каким образом движёк обрабатывает такой запрос? я всевозможными способами поиска перерыл все папки но так и не нашёл такой команды где она и куда передаётся кем чем обрабатывается. Но зато нашёл файл functions.php в котором прописал строчку, нет две строчки:

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

	$template->assign_vars(array(
...
...
...
		'PF_STATUSESIS_1'		=> ($user->data['pf_statusesis_1']),
		'PF_STATUSESIS_INF'		=> ($user->data['pf_statusesis_inf']),
...
...
...
И прописал PF_STATUSESIS_1 и PF_STATUSESIS_INF в той строчке у меня получилось:
<img src="{T_IMAGESET_PATH}/group/{PF_STATUSESIS_1}1.png" alt="" title="Статус: {PF_STATUSESIS_INF}" />
Обновил кэш страницу и возрадовался работает. Но как оказалось чуть позже не правильно. Теперь отображается статус у все пользователей и только под тем аккаунтом в котором записано в тех дополнительных полях что я создал.

Внимание вопрос :)
Что нужно написать и где написать чтобы значение из поля (я так понимаю value которое выводит информацию) отображалось только в тех профилях где это прописано и всем.
Я уже исчерпал весь свой запас предположений и догадок ))

Добавлено спустя 22 часа 51 минуту 35 секунд:
Желающих помочь прям лес рук :)
Я может непонятно описал ситуацию? укажите что не понятно я постараюсь более подробно описать.
Может кто за платно может помочь? :roll:

Добавлено спустя 22 часа 8 минут 25 секунд:
Сам решил проблему.
Всем спасибо.
Россия, такая Россия.
Vo
VoVZiK13
Откуда: Краснодар
Благодарил (а): 6 раз
Поблагодарили: 3 раза
Сообщения: 66
Зарегистрирован: 23 янв 2011, 17:52
Сообщение

Статус пользователя в виде картинки 32х32 возле лычки.

01 фев 2011, 15:15

А есть инструкция как оформлять и выкладывать готовые моды?
Россия, такая Россия.
Аватара пользователя
PPK
Администратор
Благодарил (а): 82 раза
Поблагодарили: 1621 раз
Сообщения: 10284
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

Статус пользователя в виде картинки 32х32 возле лычки.

01 фев 2011, 16:41

Если нет последющего желания выложить мод для валидации на phpbb.com - можно просто обычной инструкцией, открыть файл, найти то, заменить это и т.д., например: viewtopic.php?f=38&t=1420

Вернуться в «Вопросы, ответы и примеры решений»