Как не потерять текст при написании топика
Порой при добавлении/редактировании топика случаются казусы, при которых можно потерять уже написанный/отредактированный текст. Например, случайно закрыли вкладку, перешли назад, кликнули по какой-либо ссылке и т.п.
Чтобы избежать этого, мы можем выводить предупреждение по событию beforeunload, т.е. перед тем как пользователь покидает страницу. Только перед этим проверим были ли изменения в полях ввода.
Как реализовать?
Необходимо на страницах добавления и редактирования топика добавить скрипт. На мой взгляд проще всего это сделать через php-хук движка:1. Создаем файл с таким содержанием:
<?php /** * Регистрация хука для предотвращения потери данных при переходе со страницы добавления/редактирования контента * * @package hooks * @since 1.0 */ class HookBeforeunload extends Hook { /** * Регистрируем хуки */ public function RegisterHook () { $this->AddHook('template_body_end', 'BeforeUnload', __CLASS__, -100); } /** * Обработка хука * * @return string */ public function BeforeUnload () { /** * Выводим js-обработчик только на станице добавления или редактирования контента */ if (in_array(Router::GetActionEvent(), array('add', 'edit'))) { return ' <script> var needToConfirm = false; $("input,textarea").on("input", function () { needToConfirm = true; }); $("select").on("change", function () { needToConfirm = true; }); window.onbeforeunload = function () { if (needToConfirm) { return ""; } } $(document).on("submit", "form", function () { window.onbeforeunload = null; }); </script> '; } } } ?>
2. Сохраням файл в папку /classes/hooks/ (для LS v1.0.3) с названием HookBeforeunload.class.php
Готово!
0 комментариев