/** * Заканчивает обработку формы */ function destroy() { $json = array(); foreach ($this->fields as $name => $array) { if ($array[type] != AJAXFORM_TYPE_BUTTON && $array[type] != AJAXFORM_TYPE_RESET) { $json[$array[name]] = array( "name" => $array[name], "type" => $array[type], "values" => @array_keys($array[values]), ); } } $out = "<script> ajaxform.fields[\"{$this->name}\"] = " . multibyte::JSON_encode($json) . ";</script>\n"; if (!$this->alert) { // Обновляем сессию, теперь в сессии должны быть только ошибки и сессия от backend при отключенном JS. // При включенном JS это все будет грохнуто в конце работы backend перед отдачей обратно. // Логика такая — если у юзера включен JS, то можно работать с формой не покидая страницы, и сессия не нужна. // Если JS выключен — то происходят постоянные релоады туда-сюда между frontend и backend, поэтому данные надо сохранять. $this->sessionSet(); // Убиваем в сессии ошибки и сессию, т.о. если юзер нажмет F5 или уйдет со страницы — при следующем показе будет отображена реальная инфа, // а не та, которую он ввел и не смог сохранить (допустим) $this->sessionEnd(AJAXFORM_SESSION_PARTIAL); } else { // Если в сессии есть алерт — это значит, что мы находимся в режиме без скриптов $text = $this->alert; $text = addslashes($text); $text = str_replace("\n", '\n', $text); $text = str_replace("\r", "", $text); $out .= "\n<script> alert(\"{$text}\"); </script>"; // После показа алерта надо сам алерт из сессии убить, иначе будет показываться постоянно // Т.к. остальная сессия без изменений, то после релоада, связанного с кликом по ОК, // мы увидим все то же самое, но без алерта $this->alert = array(); $this->sessionSet(); } return $out; }