Набор методов платформы, которые не относятся ни к шаблонизатору, ни к базе данных, но нужны в коде модуля время от времени: узнать, кто выполняется сейчас, вызвать функцию своего модуля, собрать путь к загруженному файлу, оборвать страницу и отдать вместо неё другую.
UnitName() — имя выполняющегося модуля.
Может пригодиться в библиотечных функциях, которым нужно знать, кто их
вызвал (например, чтобы загрузить языковые теги именно этого
модуля):
$tags = MELBIS_INC_LANGS_tags($tpl, MELBIS()->UnitName());UnitParam() — объявленные входные
параметры всех загруженных модулей, массивом «имя модуля → список
объявлений». Инструмент интроспекции: нужен служебным и отладочным
модулям, которые строят карту проекта, а не обычному коду витрины.
UnitFunc($mName, ...$mParams) вызывает
вспомогательную функцию текущего модуля по короткому имени: движок сам
добавляет префикс модуля, принятый соглашением об именовании (см.
«Принятые обозначения»).
// Внутри модуля melbis_store_card вызовет MELBIS_STORE_CARD_price()
$price = MELBIS()->UnitFunc('price', $store, $currency);Смысл не в экономии символов, а в том, что имя функции перестаёт зависеть от имени модуля: переименовали модуль — переименовали функции, а вызовы остались прежними. Если функции с таким именем нет, разбор останавливается с ошибкой.
FilePath($mUploadTime, $mFileName = '')
строит путь к файлу по дате его загрузки — картинки и вложения
раскладываются по каталогам вида
files/2026/07_22/14_30/:
$url = MELBIS()->FilePath($image['upload_time'], $image['file_name']);Без имени файла вернёт путь к каталогу, со слешем на конце — в этом
виде метод повторяет шаблонный модификатор |path. Если
передать null вместо даты, метод переключается на каталог
текущей группы шаблонов: так адресуются статические файлы
оформления.
С именем файла добавляется проверка WebP. Для
.jpg, .jpeg и .png метод смотрит,
есть ли уже готовая WebP-версия в кеше, и если есть — возвращает путь к
ней, а если нет — к оригиналу. Важно, что FilePath
ничего не конвертирует: он только пользуется тем, что
уже сконвертировано. Создают кеш модификаторы |webp и
|text:webp — они делают преобразование на ходу, при первом
же выводе картинки (см. «Модификаторы»). Поэтому путь от
FilePath ведёт на WebP только для файлов, которые витрина
уже хоть раз показывала.
В вёрстке пользуйтесь модификаторами; метод нужен, когда путь участвует в логике модуля — например, при проверке существования файла или при сборке ссылки для внешней выгрузки.
Модуль, прерывающий работу нештатно, обязан снять служебную
блокировку компиляции кеша — это делают методы Stop() и
Halt(). Они описаны в разделе «Журналы, ошибки и
метрики».
Иногда модуль посреди работы выясняет, что показывать нечего: товар удалён, раздел закрыт, ссылка устарела. Вместо того чтобы возвращать пустой фрагмент в уже собираемую страницу, её можно оборвать и отдать браузеру другую целиком.
function MELBIS_INC_404()
{
MELBIS()->Stop();
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
MELBIS()->Run('melbis_base_404', []);
header('Content-type: text/html; charset='.MELBIS_CHARSET);
echo MELBIS()->Fetch();
exit;
}По строкам:
Stop() — первым делом. Текущий модуль
держит служебную блокировку компиляции своего кеша, и до её штатного
снятия дело не дойдёт: в конце стоит exit. Без
Stop() следующий запрос к этому модулю будет считать, что
кеш компилируется другим процессом, и ждать впустую.Run($mUnitName, $mParams) — тот же
метод, которым корневой скрипт запускает точку входа; здесь он запускает
модуль страницы 404. Этот модуль должен быть отмечен в IDE как модуль
входной точки.Fetch() — возвращает собранный HTML
строкой. Этим он и отличается от
Publish(), который тот же результат печатает сам и заодно
отправляет Content-Type. Строка нужна там, где заголовки вы
ставите вручную — как здесь, где статусом ответа должен быть именно
404.exit — ни Stop(), ни
Halt() не прерывают выполнение PHP сами по себе.Приём удобно держать в библиотеке (inc) и вызывать из
любого модуля, которому понадобилось прервать страницу.