DevCraft Документации
Руководства

PHP DevCraft Standards

Оверлей: русский PHPDoc, DLEPlugins::Check, публичный Controller include — без дубля конституции.

Практический оверлей к конституции 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 (логика + include entry)devcraft/src/modules/{Name}/Controller/классы + тонкие show_*.php для {include}
HTML/CSS/JStemplates/{skin}/devcraft/{module}/публичная разметка
Админкаdevcraft/src/**/templates/*.twigTwig + Metro

Канон include — путь от корня сайта. DLE вырезает .. → относительные ../Controller/... недопустимы:

{include file="devcraft/src/modules/{Name}/Controller/show_{slug}.php?news_id={news-id}"}

Не создавать engine/modules/devcraft/{slug}.php для новых модулей. В engine/ — только необходимое: engine/inc/{mod}.php и патчи ядра через plugins с маркерами. Минимум «спама» в дереве DLE. Legacy-файлы в engine/modules/devcraft/ не размножать.

Рендер публичных шаблонов — штатный DLE dle_template (load_template / compile). Twig не использовать для файлов в templates/. Не собирать публичный HTML через echo.

// ❌ BAD — HTML в entry / Controller
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.

См. также

На этой странице