Функция cot_generate_usertags в Cotonti
Функция cot_generate_usertags предназначена для генерации тегов пользователя для использования в шаблонах XTemplate.
Она возвращает массив тегов, которые содержат информацию о пользователе, включая его ID, имя, группу, страну и другие данные.
Код функции:
/**
* Returns all user tags for XTemplate
*
* @param mixed $user_data User Info Array
* @param string $tag_prefix Prefix for tags
* @param string $emptyname Name text if user is not exist
* @param bool $allgroups Build info about all user groups
* @param bool $cacheitem Cache tags
* @return array
* @global CotDB $db
*/
function cot_generate_usertags($user_data, $tag_prefix = '', $emptyname='', $allgroups = false, $cacheitem = true)
{
global $db, $cot_extrafields, $cot_groups, $cfg, $L, $user_cache, $db_users;
static $extp_first = null, $extp_main = null;
$return_array = [];
if (is_null($extp_first)) {
$extp_first = cot_getextplugins('usertags.first');
$extp_main = cot_getextplugins('usertags.main');
}
/* === Hook === */
foreach ($extp_first as $pl) {
include $pl;
}
/* ===== */
$user_id = (is_array($user_data) && !empty($user_data['user_id']))
? (int) $user_data['user_id']
: (is_numeric($user_data) ? (int) $user_data : 0);
if (isset($user_cache[$user_id])) {
$temp_array = $user_cache[$user_id];
} else {
if (!is_array($user_data) && $user_id > 0) {
$sql = $db->query("SELECT * FROM $db_users WHERE user_id = $user_id LIMIT 1");
$user_data = $sql->fetch();
}
if (empty($user_data) || !is_array($user_data)) {
$user_data = [];
}
if (is_array($user_data) && !empty($user_data['user_id']) && !empty($user_data['user_name'])) {
$user_data['user_birthdate'] = cot_date2stamp($user_data['user_birthdate']);
$enableMarkup = isset(Cot::$cfg['users']['usertextimg']) ? Cot::$cfg['users']['usertextimg'] : false;
$user_data['user_text'] = cot_parse($user_data['user_text'], $enableMarkup);
$temp_array = [
'ID' => $user_data['user_id'],
'NAME' => cot_build_user($user_data['user_id'], $user_data['user_name']),
'NICKNAME' => htmlspecialchars($user_data['user_name']),
'DETAILS_URL' => cot_url(
'users',
['m' => 'details', 'id' => $user_data['user_id'], 'u' => $user_data['user_name']]
),
'DETAILS_URL_SHORT' => cot_url('users', ['m' => 'details', 'id' => $user_data['user_id']]),
'FULL_NAME' => htmlspecialchars(UsersHelper::getInstance()->getFullName($user_data)),
'TITLE' => $cot_groups[$user_data['user_maingrp']]['title'],
'MAIN_GROUP' => cot_build_group($user_data['user_maingrp']),
'MAIN_GROUP_ID' => $user_data['user_maingrp'],
'MAIN_GROUP_NAME' => $cot_groups[$user_data['user_maingrp']]['name'],
'MAIN_GROUP_TITLE' => cot_build_group($user_data['user_maingrp'], true),
'MAIN_GROUP_STARS' => cot_build_stars($cot_groups[$user_data['user_maingrp']]['level']),
'MAIN_GROUP_ICON' => cot_build_groupicon($cot_groups[$user_data['user_maingrp']]['icon']),
'COUNTRY' => cot_build_country($user_data['user_country']),
'COUNTRY_FLAG' => cot_build_flag($user_data['user_country']),
'TEXT' => $user_data['user_text'],
'EMAIL' => cot_build_email($user_data['user_email'], $user_data['user_hideemail']),
'THEME' => $user_data['user_theme'],
'SCHEME' => $user_data['user_scheme'],
'LANG' => $user_data['user_lang'],
'GENDER' => ($user_data['user_gender'] == '' || $user_data['user_gender'] == 'U') ? '' : $L['Gender_' . $user_data['user_gender']],
'BIRTHDATE' => (is_null($user_data['user_birthdate'])) ? '' : cot_date('date_full', $user_data['user_birthdate']),
'BIRTHDATE_STAMP' => (is_null($user_data['user_birthdate'])) ? '' : $user_data['user_birthdate'],
'AGE' => (is_null($user_data['user_birthdate'])) ? '' : cot_build_age($user_data['user_birthdate']),
'TIMEZONE' => cot_build_timezone(
cot_timezone_offset($user_data['user_timezone'], false, false)
) . ' '
. str_replace('_', ' ', $user_data['user_timezone']),
'REGDATE' => cot_date('datetime_medium', $user_data['user_regdate']),
'REGDATE_STAMP' => $user_data['user_regdate'],
'LASTLOG' => cot_date('datetime_medium', $user_data['user_lastlog']),
'LASTLOG_STAMP' => $user_data['user_lastlog'],
'LOGCOUNT' => $user_data['user_logcount'],
'POSTCOUNT' => !empty($user_data['user_postcount']) ? $user_data['user_postcount'] : 0,
'LASTIP' => $user_data['user_lastip'],
];
if ($allgroups) {
$temp_array['GROUPS'] = cot_build_groupsms($user_data['user_id'], false, $user_data['user_maingrp']);
}
// Extra fields
if (!empty(Cot::$extrafields[Cot::$db->users])) {
foreach (Cot::$extrafields[Cot::$db->users] as $extrafield) {
$extrafieldTitle = cot_extrafield_title($extrafield, 'user_');
$extrafieldTag = strtoupper($extrafield['field_name']);
$temp_array[$extrafieldTag] = cot_build_extrafields_data(
'user',
$extrafield,
$user_data['user_' . $extrafield['field_name']]
);
$temp_array[$extrafieldTag . '_TITLE'] = $extrafieldTitle;
$temp_array[$extrafieldTag . '_VALUE'] = $user_data['user_' . $extrafield['field_name']];
}
}
} else {
$temp_array = [
'ID' => 0,
'NAME' => (!empty($emptyname)) ? $emptyname : $L['Deleted'],
'NICKNAME' => (!empty($emptyname)) ? $emptyname : $L['Deleted'],
'FULL_NAME' => (!empty($emptyname)) ? $emptyname : $L['Deleted'],
'MAIN_GROUP' => cot_build_group(COT_GROUP_GUESTS),
'MAIN_GROUP_ID' => COT_GROUP_GUESTS,
'MAIN_GROUP_STARS' => '',
'MAIN_GROUP_ICON' => cot_build_groupicon($cot_groups[1]['icon']),
'COUNTRY' => cot_build_country(''),
'COUNTRY_FLAG' => cot_build_flag(''),
'TEXT' => '',
'EMAIL' => '',
'GENDER' => '',
'BIRTHDATE' => '',
'BIRTHDATE_STAMP' => '',
'AGE' => '',
'REGDATE' => '',
'REGDATE_STAMP' => '',
'POSTCOUNT' => '',
'LASTIP' => '',
];
}
/* === Hook === */
foreach ($extp_main as $pl) {
include $pl;
}
/* ===== */
if (is_array($user_data) && isset($user_data['user_id'])) {
$cacheitem && $user_cache[$user_data['user_id']] = $temp_array;
}
}
foreach ($temp_array as $key => $val) {
$return_array[$tag_prefix . $key] = $val;
}
return $return_array;
}
разберем функцию cot_generate_usertags подробно, с комментариями на русском языке, чтобы понять, как она работает и что делает на каждом этапе.
/**
* Возвращает все теги пользователя для XTemplate.
*
* @param mixed $user_data Информация о пользователе в виде массива или ID пользователя.
* @param string $tag_prefix Префикс для тегов.
* @param string $emptyname Имя, которое отображается, если пользователь не существует.
* @param bool $allgroups Создать информацию о всех группах пользователя.
* @param bool $cacheitem Кэшировать теги.
* @return array Возвращает массив с тегами пользователя.
*/
function cot_generate_usertags($user_data, $tag_prefix = '', $emptyname = '', $allgroups = false, $cacheitem = true)
{
// Глобальные переменные, которые понадобятся в функции.
global $db, $cot_extrafields, $cot_groups, $cfg, $L, $user_cache, $db_users;
// Статические переменные, чтобы плагины загружались только один раз.
static $extp_first = null, $extp_main = null;
// Инициализация возвращаемого массива.
$return_array = [];
// Загрузка плагинов для хуков 'usertags.first' и 'usertags.main'.
if (is_null($extp_first)) {
$extp_first = cot_getextplugins('usertags.first');
$extp_main = cot_getextplugins('usertags.main');
}
// Выполнение плагинов, зарегистрированных на хук 'usertags.first'.
foreach ($extp_first as $pl) {
include $pl;
}
// Определение ID пользователя. Если переданы данные массива, то извлекается ID, иначе используется переданный ID.
$user_id = is_array($user_data) && !empty($user_data['user_id'])
? (int)$user_data['user_id']
: (is_numeric($user_data) ? (int)$user_data : 0);
// Проверка, есть ли пользователь в кэше.
if (isset($user_cache[$user_id])) {
$temp_array = $user_cache[$user_id];
} else {
// Если данных нет в кэше и передан только ID, извлекаем данные пользователя из базы данных.
if (!is_array($user_data) && $user_id > 0) {
$sql = $db->query("SELECT * FROM $db_users WHERE user_id = $user_id LIMIT 1");
$user_data = $sql->fetch();
}
// Если данные пользователя не найдены, инициализируем пустой массив.
if (empty($user_data) || !is_array($user_data)) {
$user_data = [];
}
// Если данные пользователя существуют, генерируем теги.
if (!empty($user_data['user_id']) && !empty($user_data['user_name'])) {
// Обработка даты рождения пользователя и текста.
$user_data['user_birthdate'] = cot_date2stamp($user_data['user_birthdate']);
$enableMarkup = $cfg['users']['usertextimg'] ?? false;
$user_data['user_text'] = cot_parse($user_data['user_text'], $enableMarkup);
// Генерация массива с тегами пользователя.
$temp_array = [
'ID' => $user_data['user_id'],
'NAME' => cot_build_user($user_data['user_id'], $user_data['user_name']),
'NICKNAME' => htmlspecialchars($user_data['user_name']),
'DETAILS_URL' => cot_url(
'users',
['m' => 'details', 'id' => $user_data['user_id'], 'u' => $user_data['user_name']]
),
'FULL_NAME' => htmlspecialchars(UsersHelper::getInstance()->getFullName($user_data)),
'TITLE' => $cot_groups[$user_data['user_maingrp']]['title'],
'MAIN_GROUP' => cot_build_group($user_data['user_maingrp']),
'COUNTRY' => cot_build_country($user_data['user_country']),
'TEXT' => $user_data['user_text'],
'EMAIL' => cot_build_email($user_data['user_email'], $user_data['user_hideemail']),
'GENDER' => ($user_data['user_gender'] == '' || $user_data['user_gender'] == 'U') ? '' : $L['Gender_' . $user_data['user_gender']],
'BIRTHDATE' => is_null($user_data['user_birthdate']) ? '' : cot_date('date_full', $user_data['user_birthdate']),
'AGE' => is_null($user_data['user_birthdate']) ? '' : cot_build_age($user_data['user_birthdate']),
'REGDATE' => cot_date('datetime_medium', $user_data['user_regdate']),
'LASTLOG' => cot_date('datetime_medium', $user_data['user_lastlog']),
'POSTCOUNT' => $user_data['user_postcount'] ?? 0,
'LASTIP' => $user_data['user_lastip'],
];
// Если нужно добавить информацию о всех группах пользователя.
if ($allgroups) {
$temp_array['GROUPS'] = cot_build_groupsms($user_data['user_id'], false, $user_data['user_maingrp']);
}
// Обработка дополнительных полей (extrafields).
foreach ($cot_extrafields[$db_users] ?? [] as $extrafield) {
$extrafieldTag = strtoupper($extrafield['field_name']);
$temp_array[$extrafieldTag] = cot_build_extrafields_data(
'user',
$extrafield,
$user_data['user_' . $extrafield['field_name']]
);
}
} else {
// Если пользователь не существует, заполняем массив значениями по умолчанию.
$temp_array = [
'ID' => 0,
'NAME' => $emptyname ?: $L['Deleted'],
'NICKNAME' => $emptyname ?: $L['Deleted'],
'FULL_NAME' => $emptyname ?: $L['Deleted'],
'MAIN_GROUP' => cot_build_group(COT_GROUP_GUESTS),
'COUNTRY' => cot_build_country(''),
'TEXT' => '',
'EMAIL' => '',
'GENDER' => '',
'BIRTHDATE' => '',
'AGE' => '',
'REGDATE' => '',
'POSTCOUNT' => '',
'LASTIP' => '',
];
}
// Выполнение плагинов, зарегистрированных на хук 'usertags.main'.
foreach ($extp_main as $pl) {
include $pl;
}
// Кэширование данных пользователя, если это необходимо.
if ($cacheitem && isset($user_data['user_id'])) {
$user_cache[$user_data['user_id']] = $temp_array;
}
}
// Добавление префикса к тегам и возврат массива тегов.
foreach ($temp_array as $key => $val) {
$return_array[$tag_prefix . $key] = $val;
}
return $return_array;
}
Основные аспекты функции cot_generate_usertags в Cotonti :
Параметры:
$user_data: Данные пользователя (массив или ID).$tag_prefix: Префикс для тегов.$emptyname: Текст, если пользователь не существует.$allgroups: Включить информацию о всех группах пользователя.$cacheitem: Кэшировать теги.
Кэширование:
Использует кэширование для улучшения производительности, избегая повторного запроса к базе данных.
Плагины:
Выполняет плагины, зарегистрированные на хуки 'usertags.first' и 'usertags.main'.
Генерация тегов:
Генерирует множество тегов с информацией о пользователе, которые могут быть использованы в шаблонах XTemplate.
Обработка дополнительных полей:
Обрабатывает дополнительные поля пользователя, добавленные через Cotonti.
Эта функция гибко генерирует теги для использования в интерфейсе, предоставляя полную информацию о пользователе с возможностью расширения через плагины.
Объяснение каждого этапа:
Загрузка плагинов:
Функция загружает плагины для обработки дополнительных хуков, что позволяет расширять функционал.
Получение ID пользователя:
Определяет ID пользователя, исходя из переданных данных.
Кэширование:
Проверяет, есть ли данные пользователя в кэше, чтобы избежать повторных запросов к базе данных.
Извлечение данных пользователя:
Если пользователь не найден в кэше, функция извлекает его данные из базы данных.
Генерация тегов:
Создает теги для пользователя на основе его данных, включая дополнительные поля.
Возвращение тегов:
Функция возвращает массив тегов, который можно использовать в шаблонах.
Таким образом, cot_generate_usertags является мощным инструментом для генерации данных пользователя, которые могут быть использованы в шаблонах Cotonti.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 21.01.2025 20:30
- Последнее обновление: 21.01.2025 20:30