Hope
28.Январь.2024 15:14:51
1
Здравствуйте, создала свой модуль, есть форма, которая обновляется по ajax, но нужно создать ещё свой блок в static_templates, выглядит пока так:
{** block-description:matrix_purpose **}
<div class="purpose cm-ajax-full-render" id="purpose_matrix">
<p class="title">{__("purpose_1")}</p>
<div class="flex">
<div class="purpose_flex">
<div class="purpose_arcan reverse">
<p class="black">=</p>
<p class="arcan">{if $auth.data.purpose_1}{$auth.data.purpose_1}{else}?{/if}</p>
</div>
</div>
</div>
<!--purpose_matrix--></div>
<script type="text/javascript">
$.ceEvent('on', 'ce.ajaxdone', function() {
$.ceAjax('request', fn_url('matrix.update1'), {
result_ids: 'purpose_matrix'
});
});
</script>
В контроллере так:
if ($mode === 'update1') {
if(defined('AJAX_REQUEST')){
Registry::get('view')->display('addons/matrix/blocks/static_templates/matrix_purpose.tpl');
exit;
}
}
Обновление данного блока происходит, но бесконечно, кружочек начинает крутится и после обновления данных в блоке начинает заново.
Подскажите, пожалуйста, в чем ошибка.
Ltim
29.Январь.2024 03:02:54
2
1 лайк
Евент ce.ajaxdone уходит в рекурсию
1 лайк
ну как сказать
у Вас на событие “завершен AJAX запрос” вызывается AJAX запрос, который вызывает событие “завершен AJAX запрос”, которое вызывает AJAX запрос, который вызывает событие “завершен AJAX запрос”…
2 лайка
Hope
29.Январь.2024 14:05:20
5
Опишите кратко цель вашей доработки
1 лайк
Hope
30.Январь.2024 08:00:02
7
Есть форма, по нажатию кнопки происходит обновление блока (эта форма тоже с моего модуля), нужно создать ещё один блок в static_templates, чтобы клиент мог его ставить, куда захочет.
Форма:
<form name="matrix" id="form_{$id}" action="{""|fn_url}" method="post" class="cm-ajax cm-ajax-full-render cm-processing-personal-data " data-ca-processing-personal-data-without-click="true">
<div class="buttons-container">
<div class="ty-float-left">
<button class="ty-btn__primary ty-btn__big cm-form-dialog-closer ty-btn ty-btn matrix" type="submit" name="dispatch[matrix.update]" data-ca-event="formajaxpost_upload_form">Отправить</button>
<input type="hidden" name="result_ids" value="matrix" />
</div>
</div>
</form>
Блок, который она обновляет лежит в addons/matrix/views/matrix/update.tpl
Мой же блок лежит в addons/matrix/blocks/static_templates/matrix_purpose.tpl
Вчера я попробовала создать событие на кнопку data-ca-event="formajaxpost_upload_form"
и поменяла js на этот, но не срабатывает
<script type="text/javascript">
$.ceEvent('on', 'ce.formajaxpost_upload_form', function() {
$.ceAjax('request', fn_url('matrix.update1'), {
result_ids: 'purpose_matrix'
});
});
</script>
Hope
30.Январь.2024 10:59:09
8
И будут ещё блоки добавляться и все должны как-то обновляться по этой кнопке…
Если я правильно понял, вам просто нужно поменять
<input type="hidden" name="result_ids" value="matrix" />
на
<input type="hidden" name="result_ids" value="purpose_matrix" />
Использование яваскрипта при этом можно убрать
1 лайк
Hope
30.Январь.2024 13:45:18
10
К сожалению так не работает, прекращает обновляться addons/matrix/views/matrix/update.tpl
и мой блок тоже не обновляется.
Попробовала все блоки поместить в
<div class=" cm-ajax-force" id="matrix">
<!--matrix--></div>
Обновляется только первый блок, а мой нет
вот у вас в самом первом топике html - это содержимое шаблона
addons/matrix/blocks/static_templates/matrix_purpose.tpl ? Когда в цикл уходит - у вас там скрипт не множится?
1 лайк
Покажите контент обоих шаблонов
1 лайк
Hope
31.Январь.2024 07:14:47
13
Хорошо, я начала с того, что создала addons / matrix / blocks / static_templates / matrix_form.tpl
{** block-description:matrix_forma1 **}
<div class="row-fluid">
<div class="span16 ">
<div class="row-fluid form_page_matrix">
<div class="span8 ">
<div class="ty-wysiwyg-content" data-ca-live-editor-object-id="0" data-ca-live-editor-object-type="">
{$id = "matrix"}
<div title="Расчитать">
{include file="addons/matrix/views/matrix/components/matrix.tpl"}
</div>
</div>
</div>
<div class="span8 ">
<div class="foo">
{include file="addons/matrix/views/matrix/update.tpl"}
</div>
</div>
</div>
</div>
</div>
Затем в addons/matrix/views/matrix/components/matrix.tpl
я поместила форму
<form name="matrix" id="form_{$id}" action="{""|fn_url}" method="post" class="cm-ajax cm-ajax-full-render cm-processing-personal-data " data-ca-processing-personal-data-without-click="true">
<div class="buttons-container">
<div class="ty-float-left">
<button class="ty-btn__primary ty-btn__big cm-form-dialog-closer ty-btn ty-btn matrix" type="submit" name="dispatch[matrix.update]" >Отправить</button>
<input type="hidden" name="result_ids" value="matrix" />
</div>
</div>
</form>
А в addons/matrix/views/matrix/update.tpl
, то что она будет возвращать
<div class="ty-wysiwyg-content cm-ajax-force" id="matrix">
<div style="display: flex; align-items: center; flex-direction: column;">
<div id="n1" class="trans" style="top: 27%;">
<div style="background: #C5C5C5; filter: drop-shadow(0px 0px 50px rgba(197, 197, 197, 0.50)); transform: rotate(-41deg);" class="main_lasso child_two">{if $auth.data.line_blag_center}{$auth.data.line_blag_center}{else}?{/if}</div>
</div>
</div>
<!--matrix--></div>
Это работает.
Затем, мне понадобился ещё один шаблон, который тоже бы мог обновляться по этой форме я его создала в addons / matrix / blocks / static_templates / matrix_purpose.tpl
{** block-description:matrix_purpose **}
<div class="purpose cm-ajax-full-render" id="purpose_matrix">
<p class="title">{__("purpose_1")}</p>
<div class="flex">
<div class="purpose_flex">
<div class="purpose_arcan reverse">
<p class="black">=</p>
<p class="arcan">{if $auth.data.purpose_1}{$auth.data.purpose_1}{else}?{/if}</p>
</div>
</div>
</div>
<!--purpose_matrix--></div>
Но как его обновлять вместе с тем не очень понимаю
Hope
31.Январь.2024 07:16:15
14
Да, он бесконечно начинает работать)
В контроллере через display отдавайте оба шаблона, а в форме поправьте
<input type="hidden" name="result_ids" value="matrix,purpose_matrix" />
1 лайк
Hope
31.Январь.2024 13:55:39
16
Супер! Заработало, спасибо, в контроллере сделала вот так:
<?php
use Tygh\Registry;
use Tygh\Ajax;
use Tygh\Tools\Url;
use Tygh\Tygh;
defined('BOOTSTRAP') or die('Access denied');
$view = Tygh::$app['view'];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$return_url = !empty($_REQUEST['return_url']) ? $_REQUEST['return_url'] : '';
if ($mode === 'update') {
if ($_REQUEST['result_ids'] == 'matrix, purpose_matrix') {
Registry::get('view')->display('addons/matrix/blocks/static_templates/matrix_purpose.tpl');
Registry::get('view')->display('addons/matrix/views/matrix/update.tpl');
}
}
return [CONTROLLER_STATUS_OK, $return_url];
}
if ($mode === 'update') {
if(defined('AJAX_REQUEST')){
Registry::get('view')->display('addons/matrix/blocks/static_templates/matrix_purpose.tpl');
Registry::get('view')->display('addons/matrix/views/matrix/update.tpl');
exit;
}
}
Не знаю насколько это правильно)
Благодарю
1 лайк