Как на SendIt вернуть на страницу результат из сниппета?

Здравствуйте, давно использую Sendit для отправки писем с сайта. Решил попробовать сделать шаг в сторону от обычной формы отправки, но сразу тупик, в документации нет полного документирования всех функций, что-то частями нашел в коротких заметках про новые версии по форуму.

Например, хочу сделать простенькую форму-фильтр по нескольким параметрам и хочу вернуть результат в определенный контейнер. Прочитал тут что это можно сделать указав в своем пресете параметры resultBlockSelector и resultShowMethod, а также что «сниппет должен возвращать ответ в нужном формате:
$html = $modx->runSnippet('pdoResources', $SendIt->params)
return $SendIt->success('Ваше сообщение', ['html' => $html]);»


В общем делаю разметку:
<form id="klinikfilter" data-si-form data-si-preset="filter_resources" data-si-nosave data-si-event="change">
          <div>
            <label>
              <input type="checkbox" name="has_discount" value="1">
              Есть скидка
            </label>
          </div>
        </form>
        
        <div id="filter-results"></div>
        {"<script>
            document.addEventListener('si:send:finish', (e) => {
                const {action, target, result, headers, Sending} = e.detail;
                console.log('Ответ сервера:', result);
            })
        </script>"| jsToBottom : true}


В пресетах указал так:
'filter_resources' => [
        'hooks' => 'filter_resources',
        'resultBlockSelector' => '#filter-results',
        'resultShowMethod'=>'insert',
    ],
Создал сниппет:
<?php
$parentId = 2; // ID родителя, ресурсы которого фильтруем

// Базовые условия
$where = [
    'parent' => $parentId,
    'published' => 1,
];

// Фильтр по TV has_discount
if (!empty($_POST['has_discount'])) {
    $where['TVhas_discount.value'] = 1;
}

// Генерируем HTML через pdoResources
$html = $modx->runSnippet('pdoResources', [
    'parents' => $parentId,
    'tpl' => '@INLINE <div class="item">item</div>',
    'where' => $where,
    'limit' => 0,
]);

$SendIt = $modx->getService('sendit', 'SendIt', MODX_CORE_PATH.'components/sendit/model/sendit/');
// возвращаю так как было написано в посте
return $SendIt->success('ок', ['html' => $html]);
Однако при изменении фильтра получаю 2 ошибки в консоле:
Failed to load resource: the server responded with a status of 500 () (https://stom.specchina.ru/assets/components/sendit/action.php)
Unhandled Promise Rejection: SyntaxError: The string did not match the expected pattern. (sending.js: this.result = await response.json();)
Буду благодарен за любой совет, а также о том что делаю не так
MODX 3
SendIt 2.6.0
Konstantin
10 ноября 2025, 14:31
modx.pro
123
0

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

Артур Шевченко
10 ноября 2025, 15:28
0
$SendIt = $modx->getService('sendit', 'SendIt', MODX_CORE_PATH.'components/sendit/model/sendit/');
Удали
    Konstantin
    10 ноября 2025, 17:11
    0
    Спасибо Артур за ответ, удалил. Удалил также из сниппета всю логику вообще для теста, оставил только
    return $SendIt->success('ок', ['html' => 'TEST']);
    Ошибки ушли только после того как в названии сниппета убрал нижнее подчеркивание. Но данные пришедшие из сниппета не подставляются в указанный в пресете 'resultBlockSelector' => '#filter-results'. Что-то нужно еще прописать в js?
      Артур Шевченко
      10 ноября 2025, 17:21
      1
      +1
      Каким сниппетом обрабатывается данный пресет по-твоему?
      'filter_resources' => [
              'hooks' => 'filter_resources',
              'resultBlockSelector' => '#filter-results',
              'resultShowMethod'=>'insert',
          ],
        Konstantin
        10 ноября 2025, 17:36
        0
        Заработало! да я по привычке в hook записал, а надо было так:
        'filterresources' => [
                'snippet' => 'filterresources',
                'resultBlockSelector' => '#filter-results',
                'resultShowMethod'=>'insert',
            ],
        Спасибо тебе большое!
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    4