Задача:
Хочу сделать статусы в виде картинок 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>
Код: Выделить всё
'status' => array('title' => 'UCP_PROFILE_STATUS', 'auth' => '', 'cat' => array('UCP_PROFILE')),
Код: Выделить всё
<!-- 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" />
<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'],
Код: Выделить всё
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;
Всё замечательно данные заносятся и отображаются и в админ разделе и в личном разделе. И вот тут я столкнулся с непреодолимой для меня проблемой. В файле 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']),
...
...
...
<img src="{T_IMAGESET_PATH}/group/{PF_STATUSESIS_1}1.png" alt="" title="Статус: {PF_STATUSESIS_INF}" />
Обновил кэш страницу и возрадовался работает. Но как оказалось чуть позже не правильно. Теперь отображается статус у все пользователей и только под тем аккаунтом в котором записано в тех дополнительных полях что я создал.
Внимание вопрос
Что нужно написать и где написать чтобы значение из поля (я так понимаю value которое выводит информацию) отображалось только в тех профилях где это прописано и всем.
Я уже исчерпал весь свой запас предположений и догадок ))
Добавлено спустя 22 часа 51 минуту 35 секунд:
Желающих помочь прям лес рук
Я может непонятно описал ситуацию? укажите что не понятно я постараюсь более подробно описать.
Может кто за платно может помочь?
Добавлено спустя 22 часа 8 минут 25 секунд:
Сам решил проблему.
Всем спасибо.