PHP DevCraft Standards
Оверлей: русский PHPDoc, DLEPlugins::Check, публичные templates — без дубля конституции.
Практический оверлей к конституции PHP: то, чего нет в дайджесте I–XI — BAD/GOOD для языка в коде, DLEPlugins::Check() и публичного фронта. Принципы Roistat, tabs, слои — только в конституции.
Язык в коде
Комментарии, PHPDoc (@param / @return), тексты exception и UI-строки в PHP — на русском. Ответы агента в чате — по отдельным правилам чата. Legacy не переводить оптом: только затронутые места.
// ❌ BAD
/** Returns admin context for the current request. */
throw new RuntimeException('Module not found');
// ✅ GOOD
/** Возвращает контекст админки для текущего запроса. */
throw new RuntimeException('Модуль не найден');DLEPlugins::Check()
Каждый require / require_once / include / include_once проектных путей — через DLEPlugins::Check(), в том числе с ENGINE_DIR, ROOT_DIR, DC_ROOT.
// ❌ BAD
require_once ENGINE_DIR . '/skins/default.skin.php';
include ROOT_DIR . '/devcraft/init.php';
// ✅ GOOD
require_once DLEPlugins::Check(ENGINE_DIR . '/skins/default.skin.php');
require_once DLEPlugins::Check(ROOT_DIR . '/devcraft/init.php');
include_once DLEPlugins::Check(ENGINE_DIR . '/inc/include/functions.inc.php');Исключения (без DLEPlugins::Check()):
- Composer autoload (
vendor/autoload.php) - Standalone-tools без DLE-bootstrap (например
devcraft/assetschecker/) - Чистая PHP-стандартная библиотека / внутренний
requireбез файлового пути проекта
Публичный фронт
| Слой | Где | Что |
|---|---|---|
| PHP | engine/modules/devcraft/*.php | Логика, права, $tpl->set |
| HTML/CSS/JS | templates/{skin}/devcraft/{module}/ | Публичная разметка |
| Админка | devcraft/src/**/templates/*.twig | Twig + Metro |
Рендер публичных шаблонов — штатный DLE dle_template (load_template / compile). Twig не использовать для файлов в templates/. Не собирать публичный HTML через echo.
// ❌ BAD — HTML в engine/modules/devcraft/*.php
echo '<div class="box">' . htmlspecialchars($title, ENT_QUOTES, 'UTF-8') . '</div>';
// ✅ GOOD
$tpl->set('{title}', htmlspecialchars($title, ENT_QUOTES, 'UTF-8'));
$tpl->load_template('devcraft/dleapi/profile.tpl');
$tpl->compile('content');
echo $tpl->result['content'];Fallback скина: нет файла в текущей теме → templates/Default/devcraft/....
Админский Twig: reference/front-end/templates.