[JSON] Как вывести страницу в формате JSON?

Необходимо чтобы страница site.com/api возвращала JSON с данными из ресурсов. Это можно сделать через сниппет pdoResources с помощью 'return' => 'json' но необходимо чтобы выводились не все данные, а только id, pagetitle и пара tv-полей. Примерно по такому шаблону
{
"id" : "1",
"name" : "res_name",
"img" : "res_tv_img"
}, ...
Как правильно это сделать? Вот такой вариант:
(шаблон)
[
{'!pdoResources' | snippet : [
  'parents' => 2,
  'showUnpublished' => 1,
  'tpl' => 'api_item',
  'includeTVs' => 'image,console',
]}
]
(чанк)
{
 "id": "{$id}",
 "name": "{$pagetitle}",
 "img": "{$_pls['tv.image']}",
},
работает, но только если тип ресурса указан HTML, если выбирать JSON, то как-будто вообще ничего не происходит, ни ошибок в логе, ни вывода на страницу, ничего.
Подскажите, как правильно нужно это делать
Giant Dad
18 апреля 2024, 17:19
modx.pro
176
0

Комментарии: 2

Артур Шевченко
19 апреля 2024, 10:07
0
Если нужен полноценный API, используй ZoomX. Также можно просто с делать коннектор и слать запрос к нему и возвращать что нужно и как нужно.
    Наумов Алексей
    19 апреля 2024, 11:49
    0
    Самое лучшее решение в данной ситуации — это сделать отдельный файл для работы с этим API, например:
    /assets/components/mycomponent/api.php
    ну или просто попроще
    /api.php
    внутри этого файла инициализируем MODX в API режиме, читаем, например:
    modx.pro/development/3163

    А далее просто получаем данные, как нам нужно и выводим в json:
    $query = $modx->newQuery('modResource');
    $query->where([
    'parent' => 2,
    ]);
    
    $resources = $modx->getIterator('modResource', $query);
    $data = [];
    foreach($resources as $resource) {
    $data[] = [
    'pagetitle' => $resource->get('pagetitle');
    ];
    }
    
    header("Content-Type: application/json");
    echo json_encode($data);
    exit();
    да, если нужны TV поля, то запрос будет сложнее. Но эта информация тоже есть на форуме.
    Если уж совсем лень писать запрос — то можно внутри скрипта вызвать сниппет pdoresources:
    $data = $modx->runSnippet('pdoResources', [ПАРАМЕТРЫ]);
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2