Как вывести результаты pdoResources в формате json, но с моим tpl

Всем привет!
Вывод с параметром &return=`json` меня не совсем устраивает, так как он выводит все поля документа без возможности обработки вложенными сниппетами.

Например, у меня есть TV в формате MIGX для добавления множества фото к документу и их необходимо обработать с помощью phpthumbon, а также другие необходимы обработки внутри чанков.

Если я делаю свой шаблон с закосом под структуру json:
{
«id»: "{$id}",
«pagetitle»: "{$pagetitle}",
},

То это не работает. Выводит в таком виде, но не работает там, куда отправляется эта json-ссылка.

Что делать?
Anton Erin
05 апреля 2021, 18:50
modx.pro
109
0

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

Роман
06 апреля 2021, 11:52
+1
[[!pdoResources?
	&return=`json`
]]
Тут документация
    Anton Erin
    06 апреля 2021, 12:38
    0
    Спасибо. Но говорю же — не помогает. Мне нужно, например, обработать все фото с помощью phpthumbon и вывести название родителя. Это можно сделать внутри чанка для pdoResources.
    &return=`json`
    выводит все поля ресурса, без обработок.

    Попробую по-другому спросить. Как получить и вывести в json?
    1. Обработанные изображения (image)
    2. Имя родителя, вместо id родителя
    {
    "id": "7",
    "pagetitle": "Студия",
    "parent": "4",
    "tv_photos": [
    {
    "MIGX_id": "1",
    "title": "Room",
    "image": "assets/uploads/room_2_1.webp"
    },
    {
    "MIGX_id": "2",
    "title": "Room",
    "image": "assets/uploads/room_2_2.webp"
    },
    {
    "MIGX_id": "3",
    "title": "Room",
    "image": "assets/uploads/room_2_3.webp"
    }
    },
    Буду очень рад помощи.
      Роман
      06 апреля 2021, 13:05
      0
      Ну, через SELECT, задайте, какие вам поля нужны. А так не очень понятно, при чем тут phpthumbon и json. =)
        Anton Erin
        06 апреля 2021, 15:36
        0
        Поля заданы:

        {$_modx->runSnippet('!pdoResources', [
        'fastMode' => 0,
        'limit' => 0,
        'parents' => 2,
        'depth' => 5,
        'includeContent' => 1,
        'tvPrefix' => 'tv_',
        'includeTVs' => 'stars,room_type,room_details,basis_price,photos',
        'select' => '{"modResource":"id,uri,pagetitle,content,photos"}',
        'return' => 'json',
        'where' => ['isfolder' => 0]
        ])}
        Но я не могу использовать вложенные сниппеты при return=json, которые можно использовать только в чанках.

        Как сначала обработать фотографии с помощью? Как В это (огромная фотка)
        "image": "assets/uploads/room_2_3.webp"
        воткнуть это
        [[*thumbnailImage:phpthumbof=`w=300&h=300&zc=1`]]
        ?
        Как получить имя родителя? А потом вывести все в формате json?

        Если все обобщить, то я ищу вариант чтобы сначала обработать встроенными сниппетами все что можно (мне нужно в чанках вложенные сниппеты использовать), затем сформировать правильный json и выкатить его на страницу (ресурс).

        Как такое сделать? Смотрел в сторону API Rest, но это не совсем то.
          Николай Савин
          06 апреля 2021, 19:01
          0
          При использовании return json до tpl дело не доходит.
          Эти параметры между собой не совместимы.
          Сниппеты обработать в tpl не получился.
          Чтобы получить дополнительные данные — например родителя нужно использовать конструкции LeftJOIN и Select
            Anton Erin
            06 апреля 2021, 20:16
            0
            Я пытаюсь прикрутить Vue.js на фронт, а он принимает json (мне с ним проще работать).

            Пытаюсь все обработать привычным MODX Revo и его сниппетами, сформировать правильный json и скормить Vue.js а фронт с помощью axios.

            Как можно сделать такой json с уже обработанными ТВ и др.?
              Николай Савин
              06 апреля 2021, 20:33
              0
              Привычным путем работы с шаблонизатором ничего хорошего не выйдет.
              Нужно писать API в котором работать напрямую с PHP и отдавать как нужно сформированный JSON.
              Тут можно пойти двумя путями. Либо использовать RestFull API — и путем манипулирования URL запрашивать нужную информацию, либо пробрасывать все обращения на какой то единый коннектор. который будет отдавать данные в зависимости от action и HTTP метода запроса.
              Но в любом случае обработчик должен быть PHP который уже внутри может запускать что то вроде
              $modx->runSnippet()
    Aleksandr Huz
    06 апреля 2021, 20:56
    +1
    {set $rows = $_modx->runSnippet('!pdoResources', [
        'fastMode' => 0,
        'limit' => 0,
        'parents' => 2,
        'depth' => 5,
        'includeContent' => 1,
        'tvPrefix' => 'tv_',
        'includeTVs' => 'stars,room_type,room_details,basis_price,photos',
        'select' => '{"modResource":"id,uri,pagetitle,content,photos"}',
        'return' => 'json',
        'where' => ['isfolder' => 0]
    ]) | fromJSON}
    
    {foreach $rows as $row} 
        ..
    {/foreach}
      Anton Erin
      07 апреля 2021, 13:54
      0
      Спасибо, но не работает.

      {set $rows = $_modx->runSnippet('!pdoResources', [
      'fastMode' => 0,
      'limit' => 0,
      'parents' => 2,
      'depth' => 5,
      'includeContent' => 1,
      'tvPrefix' => 'tv_',
      'includeTVs' => 'stars,room_type,room_details,basis_price,photos',
      'select' => '{"modResource":"id,uri,pagetitle,content,photos"}',
      'return' => 'json',
      'where' => ['isfolder' => 0]
      ]) | fromJSON}
      
      
      [{foreach $rows as $row}
          {
          "id":"{$row.id}",
          "uri":"{$row.uri}",
          "pagetitle":"{$row.pagetitle}",
          "content":"{$row.content}"
          },
      {/foreach}]
      Выводит подобие json'а, но Vue не принимает его и генерирует пустые объекты, без данных.
      Пробовал в одну строку, пробовал играться со скобками (выносил в переменные) — не работает.

      Что я делаю не так?
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      9