Как не потерять текст при написании топика



Порой при добавлении/редактировании топика случаются казусы, при которых можно потерять уже написанный/отредактированный текст. Например, случайно закрыли вкладку, перешли назад, кликнули по какой-либо ссылке и т.п.

Чтобы избежать этого, мы можем выводить предупреждение по событию 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 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.