SDK (DcApi) v200.1.1
Как пользоваться DcApi из DevCraft Admin на том же PHP, что и сайт: новости, пользователи, плагины.
DcApi — код внутри того же PHP-процесса, что и DLE. Это не HTTP-клиент к /api/v2: Bearer и OAuth не нужны. Живёт в DevCraft Admin, не в пакете DLE API. Шпаргалка фасадов: справочник SDK. Сценарии по HTTP — в руководствах рядом.
С версии 200.1.1 SDK живёт в DevCraft Admin (devcraft/src/sdk/dle/), а не в пакете API. Поэтому DcApi доступен даже без установленного DLE API — достаточно DevCraft Admin ≥ 200.4.1. Подробности: Слои данных Admin.
Когда SDK, а когда HTTP
| Ситуация | Что брать |
|---|---|
| Модуль / плагин / хук на этом сайте | SDK |
| Мобилка, другой сервер, Postman | HTTP /api/v2 — endpoints |
Подключение
Ничего подключать не нужно: devcraft/init.php поднимает SDK сам. Если код выполняется до инициализации Admin:
require_once DLEPlugins::Check(ROOT_DIR . '/devcraft/init.php');Прежний файл api/sdk/bootstrap.php удалён вместе со вставками в engine/init.php. Старые вставки безопасны: они обёрнуты в if (is_file(...)).
Классы SDK переехали из DleApi\{Schema,Fluent,Xfield,Sdk} в DevCraft\Dle\.... Старые имена продолжают работать через алиасы классов, но уйдут в следующем мажоре. Фасад DcApi не изменился.
Новость
То же, что создание новости по HTTP:
DcApi::news()
->withTitle('Заголовок')
->withCategory([1, 2])
->withExtras('allow_rate', 1)
->withXfield('foo', 'bar')
->create();Поиск: posts-search ↔ DcApi::query('post')->where('approve', 1)->fetchAll().
Доп. поля каталога: xfields-news ↔ DcApi::xfield(…) / DcApi::modifyXfield('post').
Пользователь
DcApi::user()
->withName('newuser')
->withEmail('[email protected]')
->create();HTTP: users-create, users-search.
Плагин
DcApi::plugin()
->withName('My Plugin')
->withVersion('1.0.0')
->withFiles([
[
'file' => 'engine/modules/example.php',
'action' => 'replace',
'searchcode' => 'старое',
'replacecode' => 'новое',
],
])
->create();HTTP: plugins-create.
Универсально
DcApi::schema('banners')->with('approve', 1)->create();
DcApi::query('users')->where('user_group', 4)->fetchAll();