Как на SendIt вернуть на страницу результат из сниппета?
Здравствуйте, давно использую Sendit для отправки писем с сайта. Решил попробовать сделать шаг в сторону от обычной формы отправки, но сразу тупик, в документации нет полного документирования всех функций, что-то частями нашел в коротких заметках про новые версии по форуму.
Например, хочу сделать простенькую форму-фильтр по нескольким параметрам и хочу вернуть результат в определенный контейнер. Прочитал тут что это можно сделать указав в своем пресете параметры resultBlockSelector и resultShowMethod, а также что «сниппет должен возвращать ответ в нужном формате:
$html = $modx->runSnippet('pdoResources', $SendIt->params)
return $SendIt->success('Ваше сообщение', ['html' => $html]);»
В общем делаю разметку:
В пресетах указал так:
MODX 3
SendIt 2.6.0
Например, хочу сделать простенькую форму-фильтр по нескольким параметрам и хочу вернуть результат в определенный контейнер. Прочитал тут что это можно сделать указав в своем пресете параметры 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
Комментарии: 4
$SendIt = $modx->getService('sendit', 'SendIt', MODX_CORE_PATH.'components/sendit/model/sendit/');Удали
Спасибо Артур за ответ, удалил. Удалил также из сниппета всю логику вообще для теста, оставил только
return $SendIt->success('ок', ['html' => 'TEST']);Ошибки ушли только после того как в названии сниппета убрал нижнее подчеркивание. Но данные пришедшие из сниппета не подставляются в указанный в пресете 'resultBlockSelector' => '#filter-results'. Что-то нужно еще прописать в js?
Каким сниппетом обрабатывается данный пресет по-твоему?
'filter_resources' => [
'hooks' => 'filter_resources',
'resultBlockSelector' => '#filter-results',
'resultShowMethod'=>'insert',
],
Заработало! да я по привычке в hook записал, а надо было так:
'filterresources' => [
'snippet' => 'filterresources',
'resultBlockSelector' => '#filter-results',
'resultShowMethod'=>'insert',
],Спасибо тебе большое!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.