Проблемы с формами полученными через AJAX

#1 23 августа 2017 в 14:10
Очень порадовало, что html-редактор при загрузке формы через ajax, работает корректно без допиливания. Это реально круто!

Но все же есть нюансы. Первый из них это подсчет символов при вводе. Если он включен, то вываливается ошибка "ReferenceError: LANG_CH1 is not defined" и ничто не работает.
Проблема в том, что переменные (как бы константы) 'LANG_CH1', 'LANG_CH2', 'LANG_CH10', которые объявляются в шаблоне формы, не видны скрипту в шаблоне поля. Сейчас буду смотреть, как исправить. Но может кто-то уже решал эту задачку.

PS Отключение подсчета через админку помогает, но это не кошерное решение.
#2 23 августа 2017 в 14:21
Решение нашлось довольно быстро и просто. В файле /templates/default/assets/ui/form.tpl.php ява-скрипт расположенный почти в конце файла:
  1. <script type="text/javascript">
  2. <?php echo $this->getLangJS('LANG_CH1','LANG_CH2','LANG_CH10', 'LANG_ISLEFT', 'LANG_SUBMIT_NOT_SAVE'); ?>
  3. $(function (){
  4. icms.forms.initUnsaveNotice();
  5. <?php if ($form->is_tabbed){ ?>
  6. initTabs('#<?php echo $form_id; ?>');
  7. <?php } ?>
  8. $('.is_collapsed legend').on('click', function (){
  9. var _fieldset = $(this).closest('.is_collapsed');
  10. $(_fieldset).toggleClass('is_collapse do_expand');
  11. $.cookie('icms[fieldset_state]['+$(_fieldset).attr('id')+']', $(_fieldset).hasClass('do_expand'));
  12. });
  13. $('.is_collapsed').each(function (){
  14. if($(this).find('.field_error').length > 0 || $.cookie('icms[fieldset_state]['+$(this).attr('id')+']') === 'true'){
  15. $(this).addClass('do_expand').removeClass('is_collapse'); return;
  16. }
  17. });
  18. });
  19. </script>
я перенес в начало файла и расположил перед началом формы. Все заработало.

Тему пока не закрываю, потому как могут возникнуть и другие нюансы (у меня уже возникали, но уже не помню какие, но как-то решал их).
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.