Файл admin.home.php в Cotonti CMF
Файл admin.home.php в движке Cotonti CMF является основным компонентом страницы домашней панели администратора. Этот файл отвечает за отображение информации и управленческих функций на главной странице административной части сайта. Рассмотрим основные задачи и условия, которые он выполняет.
Основное назначение:
- Главная страница панели администратора: Этот файл загружает и отображает информацию о состоянии системы для администраторов, такую как данные о версиях движка, информацию о доступных обновлениях и другую полезную информацию для администрирования.
- Обработка плагинов и хуков: Он также управляет интеграцией с расширениями и плагинами, которые могут добавлять собственные элементы на страницу администрирования, такие как панели инструментов и другие функциональные блоки.
- Интерфейс обновлений: Файл контролирует получение и отображение информации об обновлениях для Cotonti, показывая, если новая версия доступна, и предоставляет информацию о её содержимом.
Задачи и условия, которые выполняет код:
-
Проверка наличия файла установки: В начале работы файл проверяет, не оставлен ли файл
install.phpна сервере, и если таковой имеется, выдаёт ошибку, чтобы напомнить администратору о необходимости удалить его для повышения безопасности. -
Проверка обновлений:
- Если в настройках включена проверка обновлений, файл подключает кеш, если он не был ранее загружен.
- Он выполняет запросы к серверу Cotonti для получения информации о доступных обновлениях, используя как
file_get_contents, так иcURLдля получения данных. - Если обновление доступно, информация об этом будет отображена на панели администратора, и будет показано сообщение о версии обновления.
-
Использование хуков для расширений:
- Файл подключает различные хуки для расширений, такие как
admin.home.mainpanel,admin.home.sidepanelи общий хукadmin.home. - Эти хуки позволяют плагинам и модулям добавлять свои блоки на страницу главной панели, например, элементы для отображения дополнительной статистики или пользовательских данных.
- Файл подключает различные хуки для расширений, такие как
-
Отображение информации о системе:
- Код включает вызов функции
cot_generate_infotags, которая генерирует информацию о состоянии базы данных, таких как количество строк в таблицах, размер индексов и данных, количество установленных плагинов и версию базы данных. - Это позволяет администратору видеть текущее состояние системы, что полезно для принятия решений по её обслуживанию и улучшению.
- Код включает вызов функции
-
Отображение сообщений: В конце работы файл вызывает функцию
cot_display_messages, которая отображает различные сообщения, такие как уведомления о событиях, предупреждения или ошибки, если таковые имеются.
Характеристика стиля PHP:
- Объектно-ориентированный подход: Код активно использует объекты, такие как экземпляры классов
XTemplate,Cacheи другие. Это позволяет организовать более чистую и модульную структуру. - Использование глобальных переменных: Некоторые переменные и объекты, такие как
$t(шаблонный объект) и$cfg(конфигурационные параметры), используются как глобальные для упрощения доступа к важной информации по всему коду. - Хуки и расширения: Это важная особенность Cotonti — система хуков позволяет расширять функциональность без необходимости изменять основной код. Использование хуков позволяет разработчикам подключать свои плагины к различным частям системы.
Заключение:
admin.home.php является важной частью админ-панели в Cotonti, предоставляя администраторам основную информацию о системе, а также интеграцию с расширениями и плагинами. Он служит связующим звеном для отображения обновлений, статуса системы и получения дополнительных данных через хуки, поддерживая при этом совместимость с более старой версией интерфейса.
находится по адресу: /system/admin/admin.home.php движка php-фреймворка Cotonti.
/**
* Панель администратора - Главная страница для администраторов
*
* @package Cotonti
* @copyright (c) Cotonti Team
* @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
*/
(defined('COT_CODE') && defined('COT_ADMIN')) or die('Wrong URL.'); // Проверка, что код был вызван с правильными параметрами: COT_CODE и COT_ADMIN
$t = new XTemplate(cot_tplfile('admin.home', 'core')); // Создание объекта XTemplate для шаблона главной страницы панели администратора
if (!Cot::$cfg['debug_mode'] && file_exists('install.php') && is_writable('datas/config.php')) { // Если не включен режим отладки, существует файл install.php и файл config.php доступен для записи
cot_error('home_remove_install'); // Выводит ошибку "home_remove_install"
}
$adminTitle = $L['Adminpanel']; // Устанавливает заголовок страницы панели администратора
//Проверка версии
if (Cot::$cfg['check_updates']) { // Если в конфигурации включена проверка обновлений
if (!Cot::$cache) { // Если кэш не существует
require_once !empty($cfg['custom_cache']) ? $cfg['custom_cache'] : $cfg['system_dir'] . '/cache.php'; // Подключаем файл кэша, если он указан, или используем стандартный путь
$cache = new Cache(); // Создаём объект кэша
$cache->init(); // Инициализируем кэш
}
$updateInfo = Cot::$cache->db->get('update_info'); // Получаем информацию об обновлениях из кэша
if (empty($updateInfo)) { // Если информация об обновлениях пустая
$url = 'https://www.cotonti.com/index.php?r=updatecheck'; // Устанавливаем URL для проверки обновлений
$userAgent = 'Cotonti v.' . cot::$cfg['version']; // Устанавливаем User-Agent с версией Cotonti
if (ini_get('allow_url_fopen')) { // Если разрешено использование URL fopen
$updateInfo = @file_get_contents($url, false, stream_context_create([ // Получаем данные об обновлении с удалённого сервера
'http' => ['method' => "GET", 'header' => 'User-Agent: ' . $userAgent]
])
);
}
if (empty($updateInfo) && function_exists('curl_init')) { // Если информация всё ещё пустая и доступна функция cURL
$curl = curl_init(); // Инициализируем cURL
curl_setopt($curl, CURLOPT_URL, $url); // Устанавливаем URL для cURL
curl_setopt($curl, CURLOPT_USERAGENT, $userAgent); // Устанавливаем User-Agent для cURL
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // Устанавливаем параметр возврата данных
$updateInfo = curl_exec($curl); // Выполняем запрос и получаем данные
curl_close($curl); // Закрываем соединение cURL
}
if ($updateInfo) { // Если информация получена
$updateInfo = json_decode($updateInfo, TRUE); // Декодируем JSON-данные в массив
}
if (empty($updateInfo)) { // Если информация всё ещё пустая
// Отрицательный результат также кэшируется
$updateInfo = 'a'; // Устанавливаем флаг ошибки
cot_log('Error getting update info from cotonti.com', 'adm', 'update', 'error'); // Логируем ошибку
}
Cot::$cache->db->store('update_info', $updateInfo, COT_DEFAULT_REALM, 86400); // Сохраняем информацию в кэш на 24 часа
}
if (
!empty($updateInfo) // Если информация об обновлениях существует
&& $updateInfo != 'a' // И она не равна флагу ошибки
&& version_compare($updateInfo['update_ver'], Cot::$cfg['version'], '>') // Если новая версия больше текущей
) {
$updateInfo_message = $updateInfo['update_message'];// Совместимость с устаревшей версией плагина
if (is_array($updateInfo['update_message_lng'])) { // Если сообщения об обновлениях локализованы
if (isset($updateInfo['update_message_lng'][$usr['lang']])) { // Если для текущего языка есть сообщение
$updateInfo_message = $updateInfo['update_message_lng'][Cot::$usr['lang']]; // Используем сообщение для текущего языка
} elseif (
Cot::$usr['lang'] != Cot::$cfg['defaultlang']
&& isset($updateInfo['update_message_lng'][Cot::$cfg['defaultlang']])
) {
$updateInfo_message = $updateInfo['update_message_lng'][Cot::$cfg['defaultlang']]; // Используем сообщение для языка по умолчанию
} elseif (isset($updateInfo['update_message_lng']['en'])) { // Если есть сообщение на английском
$updateInfo_message = $updateInfo['update_message_lng']['en']; // Используем английское сообщение
}
}
$t->assign(array( // Присваиваем переменные шаблону
'ADMIN_HOME_UPDATE_REVISION' => sprintf(
Cot::$L['home_update_revision'],
Cot::$cfg['version'],
htmlspecialchars($updateInfo['update_ver']) // Отображаем сообщение о новой версии
),
'ADMIN_HOME_UPDATE_MESSAGE' => cot_parse($updateInfo_message), // Отображаем текст сообщения
));
$t->parse('MAIN.UPDATE'); // Парсим блок обновлений в шаблоне
cot_log(
'Getting update info - can get new version from cotonti.com', // Логируем успешную проверку обновлений
'adm',
'update', 'info'
);
}
}
//Устаревший код для совместимости с предыдущими версиями. Будет удалён в будущем
$t->assign(cot_generate_infotags('ADMIN_HOME_')); // Присваиваем переменные информации о системе для отображения на главной панели администратора
/* === Hook === */
foreach (cot_getextplugins('admin.home.mainpanel') as $pl) { // Для каждого плагина, подключённого к хуку 'admin.home.mainpanel'
$line = ''; // Инициализируем переменную для содержимого
include $pl; // Включаем плагин
if (!empty($line)) { // Если плагин сгенерировал содержимое
$t->assign('ADMIN_HOME_MAINPANEL', $line); // Присваиваем содержимое переменной для главной панели
$t->parse('MAIN.MAINPANEL'); // Парсим блок главной панели в шаблоне
}
}
/* ===== */
/* === Hook === */
foreach (cot_getextplugins('admin.home.sidepanel') as $pl) { // Для каждого плагина, подключённого к хуку 'admin.home.sidepanel'
$line = ''; // Инициализируем переменную для содержимого
include $pl; // Включаем плагин
if (!empty($line)) { // Если плагин сгенерировал содержимое
$t->assign('ADMIN_HOME_SIDEPANEL', $line); // Присваиваем содержимое переменной для боковой панели
$t->parse('MAIN.SIDEPANEL'); // Парсим блок боковой панели в шаблоне
}
}
/* ===== */
/* === Hook === */
foreach (cot_getextplugins('admin.home') as $pl) { // Для каждого плагина, подключённого к хуку 'admin.home'
include $pl; // Включаем плагин
}
/* ===== */
cot_display_messages($t); // Отображаем сообщения (ошибки, уведомления и т.д.)
$t->parse('MAIN'); // Парсим главный блок шаблона
$adminMain = $t->text('MAIN'); // Сохраняем итоговый результат в переменной для дальнейшего использования
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 28.01.2025 18:02
- Последнее обновление: 28.01.2025 18:02