Перейти к содержимому

Словарь XOOPS

Комплексный справочник терминов, концепций и аббревиатур, используемых в экосистеме XOOPS CMS. Термины расположены в алфавитном порядке по английскому написанию.


Стандартизированная инфраструктура административного интерфейса, введённая в XOOPS 2.3. Обеспечивает единообразный вид и поведение страниц администрирования во всех модулях.

Документ, фиксирующий значимое архитектурное решение: описание контекста, рассмотренных вариантов и обоснования принятого выбора. Хранится в директории docs/adrs/.

Незарегистрированный посетитель сайта. В XOOPS представлен группой «Анонимные пользователи» (Anonymous Users). Идентификатор группы — XOOPS_GROUP_ANONYMOUS.

Автоматическая загрузка PHP-классов по требованию без явного require. Современный XOOPS использует стандарт PSR-4:

XoopsModules\MyModule\MyClass → modules/mymodule/class/MyClass.php

Самостоятельная единица контента, размещаемая в регионах темы (сайдбар, шапка, подвал и т. д.). Блоки могут отображать динамический контент модуля, статический HTML или системные данные.

// Регистрация блока в xoops_version.php
$modversion['blocks'][] = [
'file' => 'myblock.php',
'name' => 'Мой блок',
'show_func' => 'mymodule_block_show',
'edit_func' => 'mymodule_block_edit',
];

Процесс запуска ядра XOOPS перед выполнением кода модуля. Включает подключение mainfile.php, инициализацию базы данных, сессии и объекта $xoops.


Механизм временного хранения скомпилированных шаблонов Smarty и других данных для ускорения работы сайта. Директории кэша: xoops_data/caches/smarty_cache/ и xoops_data/caches/smarty_compile/.

Механизм защиты от автоматических ботов при регистрации и отправке форм. Настраивается в xoops_data/configs/captcha/.

Класс для построения условий SQL-запросов объектно-ориентированным способом без написания сырого SQL.

use Criteria;
use CriteriaCompo;
$criteria = new CriteriaCompo();
$criteria->add(new Criteria('status', 1));
$criteria->add(new Criteria('uid', $xoopsUser->uid()));
$criteria->setSort('date');
$criteria->setOrder('DESC');
$criteria->setLimit(10);

Составной объект Criteria, позволяющий объединять несколько условий через AND или OR.

$c1 = new Criteria('status', 1);
$c2 = new Criteria('visible', 1);
$criteria = new CriteriaCompo($c1, 'AND');
$criteria->add($c2);

Атака, при которой вредоносный сайт заставляет браузер пользователя выполнить нежелательное действие на доверенном сайте. XOOPS защищает формы с помощью XoopsFormHiddenToken.

$form->addElement(new XoopsFormHiddenToken());
// При обработке:
if (!$xoopsSecurity->check()) {
// Недействительный токен — отклонить
}

Базовые операции с данными: Create (создание), Read (чтение), Update (обновление), Delete (удаление). Реализуются через XoopsObjectHandler.


Уровень абстракции базы данных в XOOPS, реализованный классом XoopsDatabase. Изолирует код от конкретной СУБД и обеспечивает защиту от SQL-инъекций.

Уникальный идентификатор модуля — имя его директории в папке modules/. Используется во всей системе для ссылок на модуль. Например: publisher, news, mymodule.

Архитектурный паттерн, в котором бизнес-логика инкапсулируется в объектах предметной области, а не в контроллерах или процедурных скриптах.

Объект для передачи данных между слоями приложения без бизнес-логики. Используется для передачи данных из репозитория в слой представления.

class ArticleDto
{
public function __construct(
public readonly int $id,
public readonly string $title,
public readonly string $body,
) {}
}

Константы, определяющие тип хранения и способ очистки переменных XoopsObject:

КонстантаОписание
XOBJ_DTYPE_INTЦелое число
XOBJ_DTYPE_FLOATЧисло с плавающей точкой
XOBJ_DTYPE_TXTBOXТекст одной строки
XOBJ_DTYPE_TXTAREAМногострочный текст
XOBJ_DTYPE_EMAILАдрес электронной почты
XOBJ_DTYPE_URLURL-адрес
XOBJ_DTYPE_ARRAYМассив
XOBJ_DTYPE_SOURCEHTML-исходник (не очищается)

Уведомление о произошедшем действии в жизненном цикле XOOPS. Обработчики событий регистрируются через Preload-классы (2.5.x) или PSR-14 EventDispatcher (4.0+).

Механизм слабой связности компонентов: модуль публикует событие, а любой другой модуль может подписаться на него и выполнить собственную логику.


Компонент системы форм XOOPS (XoopsForm), представляющий отдельное поле HTML-формы: текстовое поле, флажок, список, загрузчик файлов и т. д.

$form = new XoopsThemeForm('Редактировать статью', 'editform', 'edit.php');
$form->addElement(new XoopsFormText('Заголовок', 'title', 50, 255, $obj->getVar('title')));
$form->addElement(new XoopsFormEditor('Текст', 'body', [], $obj->getVar('body')));

Протокол передачи файлов, используемый для загрузки файлов XOOPS на веб-сервер при установке или обновлении.


Набор пользователей с общим набором прав доступа. Встроенные группы:

КонстантаIDНазначение
XOOPS_GROUP_ADMIN1Веб-мастера (полный доступ)
XOOPS_GROUP_USERS2Зарегистрированные пользователи
XOOPS_GROUP_ANONYMOUS3Анонимные посетители

Класс, управляющий CRUD-операциями для конкретного типа XoopsObject. Предоставляет методы get(), getAll(), insert(), delete(), getCount().

$handler = xoops_getModuleHandler('article', 'publisher');
$article = $handler->get($id);
$articles = $handler->getAll($criteria);
$handler->insert($article, true); // true = форс-очистка
$handler->delete($article);

Вызов include XOOPS_ROOT_PATH . '/header.php' — инициализирует тему, Smarty и отображает верхнюю часть страницы.

Синглтон-класс, обеспечивающий централизованный доступ к обработчикам модуля, конфигурации и сервисам.

// Получение экземпляра
$helper = \XoopsModules\Publisher\Helper::getInstance();
// Использование
$config = $helper->getConfig('items_per_page');
$handler = $helper->getHandler('article');

Точка расширения в коде XOOPS, позволяющая модулям вставлять собственный код в предопределённые моменты выполнения.


Метод XoopsObject для объявления переменных объекта с типом, параметрами очистки и значением по умолчанию.

public function __construct()
{
$this->initVar('id', XOBJ_DTYPE_INT, null, false);
$this->initVar('title', XOBJ_DTYPE_TXTBOX, null, true, 255);
$this->initVar('body', XOBJ_DTYPE_TXTAREA);
$this->initVar('status', XOBJ_DTYPE_INT, 1);
}

Набор основных классов XOOPS, обеспечивающих фундаментальную функциональность: XoopsDatabase, XoopsUser, XoopsSecurity, XoopsModule и др.


PHP-файл с константами интернационализации, расположенный в language/[код_языка]/. Например: language/russian/main.php.

language/russian/main.php
define('_MI_MYMODULE_NAME', 'Мой модуль');
define('_MI_MYMODULE_DESC', 'Описание моего модуля');

Основной файл конфигурации XOOPS: содержит учётные данные базы данных, определения путей и ключи безопасности. Расположен в корне сайта. Не должен быть доступен из браузера.

Управляемое изменение схемы базы данных при обновлении модуля. Реализуется через файлы SQL или скрипты обновления в директории sql/.

Самостоятельный пакет функциональности, расширяющий XOOPS. Устанавливается в modules/[dirname]/. Каждый модуль имеет файл манифеста xoops_version.php.

Архитектурный паттерн, разделяющий приложение на три компонента:

  • Model — данные и бизнес-логика (XoopsObject + XoopsObjectHandler)
  • View — представление (шаблоны Smarty .tpl)
  • Controller — обработка запросов (admin/, index.php)

Механизм PHP для организации классов и предотвращения конфликтов имён. Конвенция XOOPS:

namespace XoopsModules\Dirname;
// Пример: XoopsModules\Publisher\Article

Встроенная система XOOPS для оповещения пользователей о событиях (новые комментарии, публикации и т. п.) через электронную почту или личные сообщения.


Право доступа, назначаемое группе для выполнения определённых действий в модуле. Управляется через XoopsGroupPermHandler.

$gperm = xoops_getHandler('groupperm');
if ($gperm->checkRight('module_read', $moduleId, $groups)) {
// Доступ разрешён
}

Класс, автоматически загружаемый XOOPS из директории preloads/ модуля. Позволяет подписываться на системные события без изменения ядра.

preloads/mymodule.php
class MymodulePreload extends XoopsPreloadItem
{
public static function eventCoreHeaderFinish($args): void
{
// Выполняется при формировании шапки страницы
}
}

Стандарты PHP-FIG (Framework Interop Group), принятые в современном XOOPS:

  • PSR-1/2/12 — стиль кодирования
  • PSR-3 — интерфейс логгера
  • PSR-4 — автозагрузка
  • PSR-7 — HTTP-сообщения
  • PSR-11 — контейнер зависимостей
  • PSR-14 — диспетчер событий
  • PSR-15 — HTTP-обработчики

Объектно-ориентированный интерфейс для построения SQL-запросов без написания строк SQL вручную.

$qb = $xoopsDB->createQueryBuilder();
$qb->select('*')
->from('articles', 'a')
->where('a.status = :status')
->setParameter('status', 1)
->orderBy('a.date', 'DESC');

Класс, отвечающий за HTML-вывод элементов форм или других UI-компонентов в определённом стиле (Bootstrap, Foundation и т. д.).

Паттерн проектирования: объект, инкапсулирующий всю логику доступа к данным для сущности. Разграничивает бизнес-логику и слой хранения.

class ArticleRepository
{
public function findPublished(int $limit = 10): array
{
$criteria = new CriteriaCompo(new Criteria('status', 1));
$criteria->setLimit($limit);
return $this->handler->getAll($criteria);
}
}

Класс MyTextSanitizer для очистки и форматирования пользовательского HTML: удаление опасных тегов, преобразование BB-кодов. Настройки в xoops_data/configs/textsanitizer/.

Класс, инкапсулирующий переиспользуемую бизнес-логику. Как правило, доступен через Helper модуля.

class ArticleService
{
public function publish(Article $article): bool
{
$article->setVar('status', 1);
$article->setVar('published', time());
return $this->repository->save($article);
}
}

Механизм шаблонов PHP, используемый XOOPS для разделения логики и представления. Переменные выводятся через <{$var}>, функции — через <{func}>.

<{foreach item=article from=$articles}>
<h2><{$article.title|htmlspecialchars}></h2>
<p><{$article.body}></p>
<{/foreach}>

Атака безопасности: внедрение вредоносного SQL-кода в запрос через пользовательский ввод. Предотвращается с помощью подготовленных запросов и метода $xoopsDB->quote().

Протоколы шифрования HTTPS-соединения. Для XOOPS рекомендуется XOOPS_PROT = 'https://' и установка защищённых cookie.


Файл Smarty (.tpl или .html), определяющий слой представления модуля или темы. Хранится в templates/ модуля или templates/ темы.

Набор шаблонов, CSS и активов, определяющих визуальное оформление сайта. Хранится в themes/[название_темы]/.

Случайное значение, встраиваемое в форму для защиты от CSRF. Генерируется XoopsSecurity::createToken(), проверяется XoopsSecurity::check().


Уникальный числовой идентификатор пользователя в системе. Значение 0 соответствует анонимному пользователю.

Паттерн, отслеживающий изменения объектов в рамках транзакции и сохраняющий их за один проход, минимизируя число обращений к БД.

PHP-скрипт в директории sql/ или upgrade/ модуля, выполняющий миграцию базы данных при обновлении модуля на новую версию.


Механизм объявления полей объекта в XoopsObject. Каждое поле имеет тип (DTYPE), флаг обязательности и максимальную длину.


Пользователь, входящий в группу XOOPS_GROUP_ADMIN (ID = 1). Имеет полный административный доступ ко всем функциям сайта.

Небольшой самостоятельный компонент пользовательского интерфейса, аналогичный блоку, но предназначенный для встраивания внутрь страниц.


Библиотека утилит и паттернов для современной разработки модулей XOOPS. Включает: Helper, Request, Metagen, JWT, Database, PermissionHelper и др.

use Xmf\Module\Helper;
use Xmf\Request;
$helper = Helper::getHelper('mymodule');
$id = Request::getInt('id', 0, 'GET');

Семейство констант, определяющих тип данных переменных XoopsObject. Подробнее — см. DTYPE.

eXtensible Object-Oriented Portal System — система управления содержимым с открытым исходным кодом на PHP, ориентированная на модульную архитектуру и сообщество разработчиков.

Директория вне webroot для хранения конфигурационных файлов, кэша и временных данных XOOPS. Не должна быть доступна из браузера.

Класс абстракции базы данных. Предоставляет методы выполнения запросов, экранирования строк и управления соединением с MySQL/MariaDB.

global $xoopsDB;
$sql = 'SELECT * FROM ' . $xoopsDB->prefix('articles') . ' WHERE status = 1';
$result = $xoopsDB->query($sql);
while ($row = $xoopsDB->fetchArray($result)) {
// Обработка строки
}

Система программной генерации HTML-форм. Обеспечивает валидацию, защиту от CSRF и совместимость с темами оформления.

Класс, представляющий установленный модуль. Содержит мета-данные и конфигурацию модуля, прочитанные из xoops_version.php.

Базовый класс для всех сущностей данных в XOOPS. Предоставляет управление переменными через initVar(), автоматическую очистку и методы getVar() / setVar().

class Article extends XoopsObject
{
public function __construct()
{
$this->initVar('id', XOBJ_DTYPE_INT, null, false);
$this->initVar('title', XOBJ_DTYPE_TXTBOX, null, true, 255);
$this->initVar('body', XOBJ_DTYPE_TXTAREA);
}
}

Базовый класс обработчика объектов. Потомки реализуют CRUD-операции для конкретного XoopsObject.

class ArticleHandler extends XoopsObjectHandler
{
public function create(bool $isNew = true): Article
{
return new Article();
}
// get(), insert(), delete(), getAll(), getCount() — наследуются
}

Класс для защиты от CSRF, XSS и других атак. Предоставляет генерацию и проверку токенов, а также вспомогательные методы безопасности.

Класс, представляющий зарегистрированного пользователя. Доступен глобально через $xoopsUser.

if ($xoopsUser) {
$uid = $xoopsUser->uid();
$uname = $xoopsUser->uname();
$groups = $xoopsUser->getGroups();
$isAdmin = $xoopsUser->isAdmin($moduleId);
}

Файл манифеста модуля. Определяет название, версию, таблицы БД, блоки, шаблоны, пункты меню и параметры конфигурации модуля через массив $modversion.

Атака: внедрение вредоносного JavaScript в страницы сайта через пользовательский ввод. Предотвращается экранированием вывода (htmlspecialchars(), |htmlspecialchars в Smarty).


АббревиатураРасшифровкаРусское название
XOOPSeXtensible Object-Oriented Portal SystemРасширяемая объектно-ориентированная портальная система
XMFXOOPS Module FrameworkФреймворк модулей XOOPS
CMSContent Management SystemСистема управления содержимым
CRUDCreate, Read, Update, DeleteСоздание, чтение, обновление, удаление
CSRFCross-Site Request ForgeryМежсайтовая подделка запроса
DALDatabase Abstraction LayerУровень абстракции базы данных
DIDependency InjectionВнедрение зависимостей
DTOData Transfer ObjectОбъект передачи данных
FTPFile Transfer ProtocolПротокол передачи файлов
MVCModel-View-ControllerМодель-Представление-Контроллер
ORMObject-Relational MappingОбъектно-реляционное отображение
PHP-FIGPHP Framework Interop GroupГруппа совместимости PHP-фреймворков
PSRPHP Standards RecommendationРекомендация стандартов PHP
SQLStructured Query LanguageЯзык структурированных запросов
SSL/TLSSecure Sockets Layer / Transport Layer SecurityПротокол безопасного соединения
XSSCross-Site ScriptingМежсайтовый скриптинг
ADRArchitecture Decision RecordЗапись архитектурного решения
JWTJSON Web TokenJSON веб-токен