[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, то как-будто вообще ничего не происходит, ни ошибок в логе, ни вывода на страницу, ничего.Подскажите, как правильно нужно это делать
Комментарии: 2
Если нужен полноценный API, используй ZoomX. Также можно просто с делать коннектор и слать запрос к нему и возвращать что нужно и как нужно.
Самое лучшее решение в данной ситуации — это сделать отдельный файл для работы с этим API, например:
modx.pro/development/3163
А далее просто получаем данные, как нам нужно и выводим в json:
Если уж совсем лень писать запрос — то можно внутри скрипта вызвать сниппет pdoresources:
/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', [ПАРАМЕТРЫ]);
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.