Модуль "Users", - users.details.php в Cotonti CMF
предназначен для отображения подробной информации о пользователе на сайте
Файл "users.details.php" в Cotonti CMF является частью модуля Users и предназначен для отображения подробной информации о пользователе на сайте. Он позволяет отображать как информацию о текущем пользователе, так и информацию о других пользователях, если указывается их ID или имя. Этот файл взаимодействует с базой данных, обрабатывает данные о пользователе и формирует HTML-шаблон для отображения в пользовательском интерфейсе.
Основное назначение файла и его место в системе Cotonti
Файл "users.details.php" находится в каталоге /modules/users/inc/ и отвечает за вывод информации о пользователе на его странице профиля. Он обрабатывает данные, извлекает информацию из базы данных и передает ее в шаблон, который затем используется для вывода данных на веб-странице.
Взаимодействие с другими частями сайта
- Данные о пользователе: Файл взаимодействует с базой данных, выполняя запросы для получения информации о пользователе по его ID или имени.
- Шаблон и вывод: Он также взаимодействует с системой шаблонов Cotonti, используя объект
XTemplate, чтобы отобразить данные пользователя в заранее подготовленном шаблоне. Шаблон использует различные теги, чтобы вставить данные о пользователе в HTML. - Плагины: Код включает хуки, через которые подключаются внешние плагины, позволяя расширять функциональность без изменения основного кода.
Используемые переменные, методы, функции и классы
-
$y,$id,$s,$w,$d,$f,$u- Переменные, полученные через методcot_import, который используется для получения и фильтрации входных данных. Они могут содержать данные, передаваемые через параметры URL или формы.$y- текстовое значение, получаемое через метод POST.$id- числовое значение ID пользователя, получаемое через GET.$s- строка, представляющая параметр GET (например, для сортировки).$w,$d,$f- другие параметры, передаваемые через URL.$u- имя пользователя, передаваемое через GET.
-
cot_auth()- Функция, проверяющая права доступа пользователя для определенных действий, таких как чтение или запись информации. -
cot_block()- Эта функция используется для проверки прав пользователя, и если у него нет прав для чтения информации, выполнение кода прекращается. -
cot_die()- Прерывает выполнение кода, если данные о пользователе не могут быть получены (например, если ID пользователя не найден). -
cot_url()- Генерирует URL для перехода на другие страницы сайта, учитывая параметры маршрута и другие переменные. -
cot_tplfile()- Функция, которая возвращает путь к шаблону, который будет использован для отображения данных. -
XTemplate- Класс, использующийся для работы с шаблонами в Cotonti. Он загружает, парсит и выводит HTML-код на основе шаблонов. -
cot_generate_usertags()- Функция, которая генерирует теги для пользователя, используя его данные. Эти теги могут быть использованы в шаблоне для отображения различных данных о пользователе. -
UsersHelper- Класс, предоставляющий вспомогательные функции для работы с пользователями, такие как получение полного имени пользователя. -
cot_breadcrumbs()- Функция, создающая хлебные крошки для навигации, которые отображаются на странице профиля пользователя.
Задачи, функции и условия
- Проверка прав пользователя: Код выполняет проверку прав доступа для просмотра страницы профиля пользователя. Если у текущего пользователя нет прав для просмотра, выполнение прерывается.
- Получение данных пользователя: Файл извлекает данные о пользователе из базы данных, используя его ID или имя. Если ID не указан, он пытается получить ID на основе имени пользователя.
- Шаблонная логика: Код использует шаблон для отображения информации о пользователе. Это позволяет легко обновлять и изменять внешний вид страницы, не меняя основной код.
- Хлебные крошки: Создаются для удобной навигации по странице профиля, показывая путь от главной страницы пользователей до конкретного профиля.
- Плагины: Используются хуки для подключения внешних плагинов, что позволяет добавлять дополнительную функциональность, не изменяя основной код.
Использование сценария владельцем сайта
Владелец сайта может использовать этот код для отображения профилей пользователей на страницах сайта. Он может:
- Настроить шаблон отображения данных профиля.
- Подключить дополнительные функции через плагины, используя хуки.
- Применять кастомные параметры URL, чтобы выводить информацию о разных пользователях.
Также через использование функций, таких как cot_url(), владельцы могут формировать ссылки на страницы других пользователей, создавая динамичные ссылки на профиль.
Стиль написания PHP-кода и совместимость с версиями PHP
Код написан с использованием современного стиля PHP. Он совместим с PHP 5.4 и выше, что подтверждается использованием коротких массивов (например, $array = [1, 2, 3]) и встроенных функций, таких как cot_import(), cot_auth() и других функций, характерных для Cotonti CMF.
В целом, код строго следует принципам безопасного программирования, с учетом защиты от SQL-инъекций (используются подготовленные запросы через Cot::$db->query) и проверки прав доступа.
<?php
/**
* User Details
*
* @package Users
* @copyright (c) Cotonti Team
* @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
*/
use cot\users\UsersHelper; // Импортируем класс UsersHelper из пространства имен cot\users. Он может содержать полезные методы для работы с пользователями.
defined('COT_CODE') or die('Wrong URL'); // Проверка на то, что файл был вызван через правильный URL. Если COT_CODE не определено, скрипт завершит выполнение.
$y = cot_import('y','P','TXT'); // Получаем параметр 'y' из POST-запроса как текстовую строку. Этот параметр может быть использован в дальнейших операциях.
$id = cot_import('id','G','INT'); // Получаем параметр 'id' из GET-запроса как целое число. Это может быть идентификатор пользователя или другого объекта.
$s = cot_import('s','G','ALP',13); // Получаем параметр 's' из GET-запроса как строку длиной до 13 символов (например, сессионный токен или код).
$w = cot_import('w','G','ALP',4); // Получаем параметр 'w' из GET-запроса как строку длиной до 4 символов (например, код сессии или тип действия).
$d = cot_import('d','G','INT'); // Получаем параметр 'd' из GET-запроса как целое число, возможно, для фильтрации или идентификатора.
$f = cot_import('f','G','TXT'); // Получаем параметр 'f' из GET-запроса как строку (например, строка фильтрации или поисковый запрос).
$u = cot_import('u','G','TXT'); // Получаем параметр 'u' из GET-запроса как строку (например, имя пользователя или код).
[$usr['auth_read'], $usr['auth_write'], $usr['isadmin']] = cot_auth('users', 'a'); // Получаем авторизационные права для текущего пользователя по модулю 'users'.
// auth_read - право на чтение, auth_write - право на запись, isadmin - является ли пользователь администратором.
cot_block($usr['auth_read']); // Проверка, есть ли у пользователя право на чтение (auth_read). Если нет, дальнейшее выполнение кода будет остановлено.
- Этот участок кода загружает параметры из запроса и проверяет права доступа текущего пользователя для модуля пользователей.
- Полученные параметры могут быть использованы для обработки информации о пользователе или выполнения операций в зависимости от значений переменных.
- С помощью функции
cot_authпроверяются права пользователя на выполнение действий, и в случае отсутствия права на чтение код прекращает выполнение с помощьюcot_block.
/* === Hook === */
foreach (cot_getextplugins('users.details.first') as $pl) { // Запускается цикл для подключения плагинов, зарегистрированных на хук 'users.details.first'. Эти плагины могут изменять логику работы на этом этапе.
include $pl; // Включаем каждый плагин, возвращаемый функцией cot_getextplugins.
}
/* ===== */
if (!empty($u) && empty($id)) { // Если переменная $u не пуста и $id пуста (например, передан логин, но не ID).
$u = Cot::$db->query( // Выполняем запрос к базе данных для поиска ID пользователя по его имени.
'SELECT user_id FROM ' . Cot::$db->users . ' WHERE user_name = :name LIMIT 1', // Запрос на выборку ID пользователя по имени.
['name' => $u] // Привязываем значение переменной $u (имя пользователя) к запросу.
)->fetch(); // Выполняем запрос и получаем результат (ID пользователя).
$id = !empty($u) ? $u['user_id'] : null; // Если результат не пуст, присваиваем ID пользователю. Если результат пуст, $id остается равным null.
} elseif(empty($id) && empty($u) && Cot::$usr['id'] > 0) { // Если и $id, и $u пусты, и текущий пользователь авторизован (проверка через Cot::$usr['id']).
$id = Cot::$usr['id']; // Используем ID текущего пользователя (если он авторизован) в качестве ID для дальнейших операций.
}
cot_die(empty($id), true); // Если $id пуст, скрипт завершится с ошибкой (вызывает стоп выполнения).
$sql = Cot::$db->query('SELECT * FROM ' . Cot::$db->users . ' WHERE user_id = ? LIMIT 1', $id); // Запрос к базе данных для получения всех данных пользователя по его ID.
cot_die($sql->rowCount() == 0, true); // Если запрос не вернул результатов (пользователь с таким ID не найден), скрипт завершится с ошибкой.
$urr = $sql->fetch(); // Извлекаем данные пользователя из запроса.
- Этот код получает информацию о пользователе, в зависимости от того, переданы ли его параметры через URL или если используется ID текущего пользователя.
- Если имя пользователя передано в URL, выполняется запрос к базе данных для получения его ID.
- В случае отсутствия данных о пользователе, используется ID текущего авторизованного пользователя.
- Код завершает выполнение, если не удается найти пользователя по указанному ID или если параметр $id не задан.
- Это делает код гибким для отображения данных как для конкретного пользователя, так и для текущего авторизованного пользователя.
$title_params = array( // Создается массив параметров для титульной строки.
'USER' => Cot::$L['User'], // Переменная 'USER' будет содержать строку с переводом слова "User" из языкового файла.
'NAME' => $urr['user_name'] // Переменная 'NAME' содержит имя пользователя из данных, полученных из базы данных.
);
Cot::$out['subtitle'] = cot_title('title_users_details', $title_params); // Формируем подзаголовок страницы, используя функцию cot_title для создания титульной строки, передавая параметры $title_params.
$mskin = cot_tplfile(['users', 'details'], 'module'); // Загружается файл шаблона для страницы деталей пользователя. Массив указывает, что сначала будет пытаться найти 'users.details', а затем 'details' как fallback в модуле 'users'.
/* === Hook === */
foreach (cot_getextplugins('users.details.main') as $pl) { // Выполняется подключение плагинов, зарегистрированных на хук 'users.details.main', что позволяет расширять функциональность страницы.
include $pl; // Включаем каждый плагин, добавленный на хук.
}
/* ===== */
Cot::$out['canonical_uri'] = cot_url( // Устанавливаем канонический URL для текущей страницы.
'users', // Указываем основной модуль 'users'.
['m' => 'details', 'id' => $urr['user_id'], 'u' => $urr['user_name']] // Параметры для формирования URL: 'm' (модуль), 'id' (ID пользователя), 'u' (имя пользователя).
);
- Этот фрагмент кода настраивает подзаголовок страницы с помощью параметров, передаваемых в массиве $title_params, и выводит его с использованием функции cot_title.
- Код загружает шаблон страницы с деталями пользователя из папки модуля 'users', что позволяет динамически отображать информацию о пользователе.
- Вставляются плагины, зарегистрированные на хук 'users.details.main', что дает возможность другим разработчикам добавлять дополнительные действия или изменения на странице деталей пользователя.
- Канонический URL для страницы формируется с использованием функции cot_url, обеспечивая корректную ссылку на текущую страницу, что важно для SEO.
require_once Cot::$cfg['system_dir'] . '/header.php'; // Подключаем файл 'header.php' из системной директории, чтобы инициализировать общие компоненты страницы, например, шапку сайта.
$t = new XTemplate($mskin); // Создаем новый объект XTemplate, загружая соответствующий шаблон (в данном случае, переменная $mskin указывает на шаблон страницы).
$t->assign(cot_generate_usertags($urr, 'USERS_DETAILS_', '', true)); // Генерируем теги для пользователя с помощью функции cot_generate_usertags, создавая набор тегов для шаблона, основываясь на информации о пользователе из массива $urr.
$usersHelper = UsersHelper::getInstance(); // Получаем экземпляр класса UsersHelper, который предоставляет методы для работы с пользователями (например, для получения полного имени пользователя).
if ((int) $urr['user_id'] === (int) Cot::$usr['id']) { // Если ID текущего пользователя совпадает с ID того пользователя, чьи детали отображаются, создаем хлебные крошки для личного профиля.
$breadCrumbs = [[cot_url('users', ['m' => 'details']), Cot::$L['users_myProfile']]]; // Формируем хлебные крошки, ссылаясь на страницу 'users' и название 'My Profile' для текущего пользователя.
} else { // Если отображаются детали другого пользователя, создаем хлебные крошки с навигацией через список пользователей.
$breadCrumbs = [
[cot_url('users'), Cot::$L['Users']], // Хлебная крошка для всех пользователей.
[
cot_url('users', ['m' => 'details', 'id' => $urr['user_id'], 'u' => $urr['user_name']]), // Ссылка на страницу деталей текущего пользователя.
$usersHelper->getFullName($urr), // Отображаем полное имя пользователя, полученное с помощью метода getFullName().
],
];
}
- Подключение файла header.php важно для загрузки общих элементов страницы (шапка, меню и т.д.), необходимых для всех страниц сайта.
- Создается объект XTemplate, который использует шаблон, заданный в переменной $mskin. Это позволяет обрабатывать HTML-шаблон для страницы.
- Генерация пользовательских тегов для отображения информации о пользователе в шаблоне. Функция cot_generate_usertags используется для создания переменных и тегов на основе данных из массива $urr.
- Получение экземпляра помощника UsersHelper, который предоставляет различные методы для работы с данными пользователей, например, для получения полного имени пользователя.
- Условие проверяет, является ли отображаемая информация о пользователе для текущего вошедшего пользователя. В зависимости от этого генерируются разные хлебные крошки.
- Если отображается профиль текущего пользователя, хлебные крошки содержат ссылку на профиль текущего пользователя, если для другого пользователя — на профиль этого пользователя, с полным именем, полученным через помощника.
$t->assign([ // Присваиваем значения переменным шаблона для отображения.
'USERS_DETAILS_TITLE' => htmlspecialchars($usersHelper->getFullName($urr)), // Присваиваем полное имя пользователя, экранированное для безопасности (функция htmlspecialchars), в переменную 'USERS_DETAILS_TITLE'.
'USERS_DETAILS_SUBTITLE' => Cot::$L['use_subtitle'], // Присваиваем значение подписи из локализации Cot::$L (переменная 'use_subtitle') в 'USERS_DETAILS_SUBTITLE'.
'USERS_DETAILS_BREADCRUMBS' => cot_breadcrumbs($breadCrumbs, Cot::$cfg['homebreadcrumb']), // Присваиваем сгенерированные хлебные крошки в 'USERS_DETAILS_BREADCRUMBS', используя функцию cot_breadcrumbs с параметрами хлебных крошек и конфигурации для домашней страницы.
]);
/* === Hook === */
foreach (cot_getextplugins('users.details.tags') as $pl) { // Подключаем внешние плагины, если они есть, для добавления дополнительных тегов или обработки в шаблоне.
include $pl; // Включаем плагин в выполнение.
}
/* ===== */
-
В блоке
$t->assignпроисходит назначение данных для отображения в шаблоне. Это включает в себя:- Полное имя пользователя, полученное через
UsersHelper, для отображения в заголовке страницы. - Локализованную подпись, которая будет отображаться как подзаголовок.
- Хлебные крошки, которые выводят навигацию по страницам и возвращают пользователя к главной странице через функцию
cot_breadcrumbs.
- Полное имя пользователя, полученное через
-
В блоке "Hook" происходит подключение внешних плагинов для страницы. Если на странице существуют плагины, связанные с тегами для этого модуля (в данном случае, с
users.details.tags), они будут подключены и их код будет выполнен. Это позволяет расширить функциональность страницы через дополнительные плагины.
if ($usr['isadmin']) { // Проверяем, является ли текущий пользователь администратором. Если да, выполняем действия внутри блока.
$t-> assign([ // Присваиваем значения переменным для отображения в шаблоне.
'USERS_DETAILS_ADMIN_EDIT' => cot_rc_link(cot_url('users', 'm=edit&id='.$urr['user_id']), $L['Edit']), // Присваиваем ссылку на страницу редактирования пользователя с текстом "Edit", если пользователь является администратором.
'USERS_DETAILS_ADMIN_EDIT_URL' => cot_url('users', 'm=edit&id='.$urr['user_id']), // Присваиваем сам URL для редактирования пользователя, который может быть использован для других целей (например, для ссылок без текста).
]);
$t->parse('MAIN.USERS_DETAILS_ADMIN'); // Парсим блок шаблона, связанный с редактированием пользователя для администраторов.
}
- В этом блоке кода проверяется, является ли текущий пользователь администратором, используя переменную
$usr['isadmin']. - Если это так, то для шаблона присваиваются два значения:
USERS_DETAILS_ADMIN_EDIT: Ссылка с текстом "Edit", которая ведет на страницу редактирования пользователя.USERS_DETAILS_ADMIN_EDIT_URL: Чистый URL для страницы редактирования пользователя без текста, только ссылка.
- Затем происходит парсинг блока шаблона
MAIN.USERS_DETAILS_ADMIN, который отображает функциональность для администратора (например, ссылки на редактирование пользователя).
$t->parse('MAIN'); // Парсим шаблон для основной части страницы. Это активирует и заполняет все блоки и теги в шаблоне, которые были определены ранее.
$t->out('MAIN'); // Выводим парсенный шаблон на экран. Этот метод возвращает обработанный HTML код, который был сгенерирован шаблоном для блока 'MAIN'.
require_once $cfg['system_dir'] . '/footer.php'; // Подключаем файл footer.php, который обычно содержит код для футера страницы (например, завершение HTML-разметки, подключения скриптов и стилей).
Комментарий:
parse('MAIN')активирует и обрабатывает блок 'MAIN' из шаблона. Все теги, переменные и плагины, связанные с этим блоком, обрабатываются на этом шаге.out('MAIN')выводит обработанный блок 'MAIN' на страницу. Это приводит к выводу готового HTML-кода, который был сгенерирован с использованием шаблона.require_onceподключает файлfooter.php, который обычно завершает страницу, вставляя футер (например, закрытие тега</body>и другие элементы).
Комментарии (0)
Автор контента
Оффлайн
Sodium Carbonate
Последняя авторизация: 19.07.2026 01:57
- Страница размещена: 31.01.2025 00:28
- Последнее обновление: 31.01.2025 00:40